並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 89件

新着順 人気順

排他制御の検索結果1 - 40 件 / 89件

  • 排他制御の基礎の基礎

    はじめに システムに存在するリソースには同時にアクセスしてはいけないものが多々あります。身近な例を挙げると、Ubuntuのパッケージ管理システムのデータベースがあります。aptコマンドの動作によってこのデータベースは更新されるのですが、同時に2つ以上のaptが動作できたとすると、データベースが破壊されてシステムが危機的状況に陥ります。 このような問題を避けるために、あるリソースに同時に1つの処理しかアクセスできなくする排他制御というしくみがあります。排他制御はOSが提供する重要な機能の一つです。 排他制御が必要なケース 排他制御は直感的ではなく非常に理解が難しいのですが、ここでは比較的理解が簡単なファイルロックというしくみを使って説明します。説明には、あるファイルの中身を読みだして、その中に書いてある数字に1を加えて終了するincというという単純なプログラムを使います。

      排他制御の基礎の基礎
    • 排他制御のためだけに Redis 渋々使ってませんか?データベース単独でアドバイザリーロックできるよ!

      トランザクション分離レベルについての教養があったほうがこの記事の内容を理解しやすいため,必要に応じてまず以下を参照されたい。 背景 以前, Qiita で以下の記事を投稿した。今回の議題に直接的な関係はないが,関連している部分があるため引用する。 MySQL/Postgres とも, MVCC アーキテクチャの恩恵で, SELECT と UPDATE は基本的には競合しない。 単一レコードのシンプルな UPDATE でも排他ロックされ,排他ロック中のレコードへの UPDATE での変更操作は トランザクション分離レベルによらず ブロックされる。UPDATE 文に含まれる WHERE 句での検索もブロックされ,これはブロックされない SELECT による検索とは別扱いになる。 但し UPDATE 文の WHERE 句上で,更新対象をサブクエリの SELECT から自己参照している場合は例外。

        排他制御のためだけに Redis 渋々使ってませんか?データベース単独でアドバイザリーロックできるよ!
      • 排他制御を行う GitHub Action を作った

        弊社では GitHub のレポジトリ管理に Terraform GitHub provider を使用しています。 いちいち手元で terraform plan や terraform apply を叩くのは面倒なので、 GitHub Actions を利用することを考えました。 tf ファイルと現実のリソースとの不整合を避けるために、 これらのコマンドは排他的に実行する必要があります。 例えば terraform apply を実行している最中に terraform plan を実行することはできません。 ここで問題になってくるのが GitHub Actions のジョブ並列数です。 2020-12-30 現在、GitHub Actions は同時に 20 並列まで実行可能ですが、逆に並列数を制限できないという贅沢な悩みがあります。 一応 Matrix Build の並列数を制限するオプ

        • 並行・並列プログラミングと同期・排他制御とイミュータブル性の話〜その1「背景: クロック周波数の停滞とコア数の増加」 - Qiita

          大学の授業で講義資料を作ったので,Qiitaにも展開しておきます. 背景: クロック周波数の停滞とコア数の増加 コンピュータはクロック周波数に同期して計算をします.おおむね1秒間にクロック周波数の数で示されるだけの数の機械語命令を実行できると考えると良いです.たとえばクロック周波数が1GHzであれば,1GHz=1,000MHz=1,000,000(百万)kHz=1,000,000,000(10億)Hzですので,1秒間に1,000,000,000(10億)個の機械語命令を実行できるというような感じです.もちろんこれは概算です. いわゆるヘネパタ本(J. L. Hennessy & D. A. Patterson: Computer Architecture: A Quantitative Approach, 6th edition. Morgan Kaufmann, 2017; 邦訳 中條・

            並行・並列プログラミングと同期・排他制御とイミュータブル性の話〜その1「背景: クロック周波数の停滞とコア数の増加」 - Qiita
          • 排他制御(楽観ロック・悲観ロック)の基礎  - Qiita

            排他制御とは 共有資源(データやファイル)に対して複数のアクセスが見込まれる場合に、同時アクセスにより不整合が発生することを防ぐため、あるトランザクションが共有資源(データやファイル)にアクセスしている時は他トランザクションからはアクセスできないようにして直列に処理されるように制御すること。 ■同時アクセスによる不整合の例 ■排他制御をすることで整合性を保つ 排他制御の方式 排他制御の実現方式はいくつか存在するが、ここでは代表的な楽観ロック(楽観的排他制御)と悲観ロック(悲観的排他制御)を紹介する。 楽観ロック(楽観的排他制御) 楽観ロックとは、めったなことでは他者との同時更新は起きないであろう、という楽観的な前提の排他制御。データそのものに対してロックは行わずに、更新対象のデータがデータ取得時と同じ状態であることを確認してから更新することで、データの整合性を保証する方式。楽観ロックを使用

              排他制御(楽観ロック・悲観ロック)の基礎  - Qiita
            • システム障害が帰宅ラッシュを直撃、東武東上線を止めた「排他制御」のバグ

              2019年9月25日、東武東上線にトラブルが次々と起こった。人身事故やシカの衝突といった出来事が同日に発生。そのうえ「運行管理システム」まで不具合を起こした。原因は排他制御のバグで、導入19年目に初めて顕在化したものだった。影響は約5万4000人、遅延は最大6時間14分に及んだ。 「運転再開を見込んでおりません」。2019年9月25日、東武東上線成増駅の掲示板に出ていた文言がツイッターで大きな話題となった。 この日、東武東上線はダイヤの大幅な乱れにより、沿線各駅の構内は電車に乗れなかった人々であふれかえっていた。普通は「運転の再開時刻は未定です」などと赤い字で書かれた案内が出るが、成増駅では冒頭のように風変わりな表現となってしまった。運転再開の見通しが立たないことによる混乱ぶりがうかがえる。 東武東上線は同日、池袋-小川町駅間で運転を見合わせ、上下線で合計103本が運休。午後に最大で6時間

                システム障害が帰宅ラッシュを直撃、東武東上線を止めた「排他制御」のバグ
              • AWS DynamoDBで楽観的排他制御(楽観的ロック)をやってみた | DevelopersIO

                楽観的排他制御(楽観的ロック)とは、同時アクセスによるデータの不整合を防ぐ排他制御(ロック)の手段です。バージョン番号や更新日時を利用して、データを取得してから更新するまでの間、データが変更されていないことを確認することで整合性を保ちます。対照に悲観的排他制御(悲観的ロック)では、データを取得する際にロックをかけることで整合性を保ちます。 DynamoDBでは楽観的排他制御を実装できます。また、DynamoDBのトランザクションでは楽観的排他制御が採用されています。 DynamoDBで楽観的排他制御 AWS LambdaでDynamoDBのデータを更新する際に、条件付き書き込みを使用してバージョン番号で楽観的排他制御を実装してみます。 DynamoDBに商品テーブルProductを作成して次のデータを格納しておきます。 productName(PK) stock version Lambd

                  AWS DynamoDBで楽観的排他制御(楽観的ロック)をやってみた | DevelopersIO
                • 排他制御のためだけに渋々 Redis 使ってませんか?

                  MySQL/Postgres におけるトランザクション分離レベル - Speaker Deck https://speakerdeck.com/mpyw/postgres-niokerutoranzakusiyonfen-li-reberu 上記からの続編です。 排他制御のためだけに Redis 渋々使ってませんか?データベース単独でアドバイザリーロックできるよ! https://zenn.dev/mpyw/articles/rdb-advisory-locks 上記の記事を解説する補佐的なスライドとして,株式会社ゆめみの社内勉強会にて発表しました。

                    排他制御のためだけに渋々 Redis 使ってませんか?
                  • アプリのコンテナ化と排他制御 ~ データ 破壊 だ ヨ 全員集合

                    Kubernetes Meetup Tokyo #36のLT資料です。 https://k8sjp.connpass.com/event/196212/

                      アプリのコンテナ化と排他制御 ~ データ 破壊 だ ヨ 全員集合
                    • 【Goのやさしい記事】goroutineと排他制御を10分で入門しよう! - Qiita

                      はじめに この記事ではgoroutineおよび関連性の高いsyncパッケージの基本知識や使い方をまとめます。 Goの基本的な文法はざっと触れたが、「goroutine」、「WaitGroup」、「channel」、「Mutex」などの言葉を聞いて全く心配ないとは言い切れない人向けの記事です。 残念ながら、メモリやCPU、プロセスなどのOSに近いところまでは踏み入れません。 goroutineは簡単だとよく聞きますが、そもそも並行処理そのものが難しいので1つずつ理解してきましょう! 本記事での動作確認環境は以下です。 Goでの並行処理 ネットワーク通信などで待ち時間の大きい処理を非同期に行いたい、直列で動作させる必要がない処理群を高速に終わらせたいなどを理由に並行処理を使うことが多いと思います。 Goではgoroutineと呼ばれる軽量スレッドを簡単に動かせます。 なぜ「軽量」か メモリ消費

                        【Goのやさしい記事】goroutineと排他制御を10分で入門しよう! - Qiita
                      • 排他制御でGoogle Apps Scriptを安全に実行【GAS】 🌴 officeの杜 🥥

                        今回使用するスプレッドシート 排他制御サンプル1 - 3種類の排他制御コードが入っています(ライブラリ元でもある) 排他制御サンプル2 - スクリプトロックをサンプル1からライブラリとして呼び出すコードだけが入ってる ※サンプルではcopypaste()というメインルーチンをそれぞれのルーチンから呼び出しています。 概要 LockServiceというクラスを使用するのですが、3種類のロックサービスがあります。必ず冒頭でロックを宣言して、その後指定秒数のロックを実施、最期に必ずロックをリリースするといった一連の手順が必要になっています(でなければタイムアウトするまでロックされっぱなしになります)。 指定秒数よりも前にスクリプトが終了した場合、待たされていた側は即時にスクリプトが実施されるようになります。逆に指定秒数以上待たされた場合にはエラーが発生しスクリプトの実行がキャンセルされます。 ロ

                          排他制御でGoogle Apps Scriptを安全に実行【GAS】 🌴 officeの杜 🥥
                        • マルチスレッド、排他制御ってなに? - Qiita

                          はじめに 特に組み込み系開発者なら超絶便利でよく利用するので、ドはまりして必死の調査により理屈を覚えた人も多数いるであろうマルチスレッドプログラミング。今回は本件について出来るだけかみ砕いて説明したいと思います。 記事の主題は以下となります。 プロセス/スレッドってなに? 排他制御ってなんで必要なの? その他注意点や排他を減らす手段の紹介 プロセス/スレッドってなに? プロセス: main関数で動くプログラム 以前ライブラリの説明をした際に、プログラムはmain関数や使用するデータによって実現すると記載させてもらいました。このプログラムを実行すると、このプログラムの情報が全てメモリ上に展開され、利用されます。この展開された情報をひとまとめにしてプロセスと呼んでいます。 実行されたプログラムのことをプロセスと呼ぶので、例えば同じプログラムを2回実行すると、2つのプロセスが出来ることになります

                            マルチスレッド、排他制御ってなに? - Qiita
                          • Goによる排他制御 ~ RWMutexによるRLockとLock - おひとり

                            Go言語でMutexおよびRWMutexを使った排他制御について調べたのでまとめます。 RWMutexとMutex RWMutexによる書き込み用ロック RWMutexによる読み込み用ロック RLockとLock まとめ 参考文献 RWMutexとMutex Mutexを使ったLockは読み込み(Read)も書き込み(Write)も両方禁止できる。つまり他のゴルーチンがそのMutexによりLockされている資源を使いたい時は、直前のLockが解放されるまで待つことになる。 一方で、RWMutexはMutexの機能のほか、読み込み(Read)のみ許可するLockができる。 つまり、他のゴルーチンがRWMutexの読み込みロックされている資源を使いたいとき、書き込みについては待たされるが、読み込みだけであれば、直前のLockの解放を待たずに処理を実行できる。 つまり、RWMutexはMutex

                              Goによる排他制御 ~ RWMutexによるRLockとLock - おひとり
                            • Webアプリケーション開発における、楽観的排他制御・悲観的排他制御のまとめ - Qiita

                              はじめに アプリケーション開発において、ユーザーが入力したデータを永続化するにはDBを利用して実現するのが、スタンダードでしょう。 そして、DBを適切に扱うには、排他制御と言う概念を把握することが重要です。 では、排他制御とは何でしょうか? 排他制御を辞書で引いてみると、適切に用語を解説してくれているページがありましたので、引用します。 《exclusive control》同時に複数のユーザーがアクセスできるファイルやデータベースにおいて、一方が処理中の場合、他方のアクセスを制限すること。それによりデータの整合性を保つ。ロック。 goo辞書 - 排他制御 引用した通りの内容ではありますが、排他制御は、同時にアクセスがあった場合にデータの整合性を保つために必要なものです。 ”データの整合性が保たれている”と言う事は、アプリケーションが想定したデータ構造になっている事を意味しますし、逆に”デ

                                Webアプリケーション開発における、楽観的排他制御・悲観的排他制御のまとめ - Qiita
                              • 並行・並列プログラミングと同期・排他制御とイミュータブル性の話〜その2「スレッドと同期・排他制御」 - Qiita

                                大学の授業で講義資料を作ったので,Qiitaにも展開しておきます. この記事シリーズでは,並行・並列プログラミングについて,要(かなめ)となる同期・排他制御の役割をCとJavaを例に簡単なプログラム例を示します.次に同期・排他制御の問題点をCのプログラム例とともに示します.そしてElixir(エリクサー)によって実現されている,全てをイミュータブルにすることによる利点について示します. シリーズ 並行・並列プログラミングと同期・排他制御とイミュータブル性の話〜その1「背景: クロック周波数の停滞とコア数の増加」 並行・並列プログラミングと同期・排他制御とイミュータブル性の話〜その2「スレッドと同期・排他制御」(本記事) 並行・並列プログラミングと同期・排他制御とイミュータブル性の話〜その3「同期・排他制御の2つの問題点」 並行・並列プログラミングと同期・排他制御とイミュータブル性の話〜その

                                  並行・並列プログラミングと同期・排他制御とイミュータブル性の話〜その2「スレッドと同期・排他制御」 - Qiita
                                • SQLAlchemy で悲観的・楽観的排他制御 - Qiita

                                  SQLAlchemy とは SQLAlchemyは Python の ORM で、リレーショナルデータベースをオブジェクトとして扱うとこができるライブラリです。 SQLite、MySQL、PostgreSQL、Oracle などのデータベースに使用することができます。 導入するメリットとしては、 SQL を直接記述することなく、Python オブジェクトとしてデータベースを操作できる データベースの種類によらず、同一のソースコードで複数のデータベースを併用することができる SQL インジェクション対策がサポートされている などが上げられます。 今回は SQLAlchemy と MySQL を用いて、悲観的・楽観的排他制御を実装していきます。 環境 SQLAlchemy を使用するには、以下のインストールが必要です。括弧内は今回使用したバージョンです。 Python (3.7.3) データベ

                                    SQLAlchemy で悲観的・楽観的排他制御 - Qiita
                                  • 新人に悲観ロックによる排他制御を体験してもらう - Qiita

                                    1. はじめに 新人に悲観ロックによる排他制御を説明する際、実際にPostgreSQLを操作して見せたデモの評判がよかったため、今回Qiitaの記事にしてみました。排他制御は並列実行のイメージが掴めないと知識だけで理解するのは難しいので、体験してみると多少は理解しやすくなるかと思います。 なお、排他制御の説明については、他の方の良い記事やWebサイトがあるのでそちらを参照ください。 排他制御のあれこれ データベースさわったこと無い新人向けトランザクション入門 TERASOLUNA5.xのガイドラインの6.4. 排他制御 2. 悲観ロックを試してみる 2.1. 事前準備 今回は「PostgreSQL 9.3」を利用して悲観ロックを試してみます。 PostgreSQLのインストールについては他の方の記事を参考にしてみてください。 Windows環境でPostgreSQL 新人研修用(DB編)

                                      新人に悲観ロックによる排他制御を体験してもらう - Qiita
                                    • 【Unity】Input Systemの同時押しを排他制御する

                                      Input Systemで特定のボタンが押されている時だけ入力を受け付けなくするにはどうすればいいの? 例えば、Tabキーでは「進む」けど、Shift + Tabキーでは「戻る」のみ反応させたいの。 Input Systemでボタンの同時押しと片方押しを排他制御する方法の解説記事です。 例えばTabキーを使ったナビゲーションを実装するとき、Tabキー単体では「進む」操作になるが、Shift + Tabキーが押された場合は「戻る」操作となり、「進む」操作は実行されないようにしたい場合を想定します。 しかし、通常はShift + Tabを同時押しするとTabキーが押された時点で「進む」と「戻る」の両方の操作が実行されてしまいます。 [1] Input System 1.4.0以降ではこれらを排他制御する機能が追加されています。また、それ未満のバージョンでもComposite Bindingを自

                                        【Unity】Input Systemの同時押しを排他制御する
                                      • SpringFrameworkのスケジューリング機能と排他制御 - Qiita

                                        はじめに SpringFrameworkには、起動しているアプリケーションから非同期の処理を実行できる機能が提供されており、非同期処理を実行する方法がいくつかあります。その中の1つである スケジューラー @Scheduled を使った定期実行の方法と、そのスケジューラーの多重起動の防止を行うShedLockを紹介します。 スケジューラー機能の使い方 SpringBootを使った設定は以下の通りです アプリケーション起動クラスないしは設定クラスに@EnableSchedulingを付与する 一定間隔で非同期実行をするメソッドに@Scheduledを付与する(Springのコンテキストに登録してあるクラスのみ対象。) 具体的なコード例は次の通りです。 アプリケーション起動クラス、ないしは設定クラスにて@EnableSchedulingを付与しておけば、あとはスケジュール実行したいメソッドに @

                                          SpringFrameworkのスケジューリング機能と排他制御 - Qiita
                                        • async-lockを使った排他制御

                                          async-lockを使ってサーバサイドで排他制御させる方法です。排他制御を使えば同時アクセスよるデータの不整合を防げます。本記事で扱うモジュールのバージョンは次のとおりです。 Node.js - 14.16.0 express - 4.17.1 async-lock - 1.3.0 インストール 次のコマンドを実行します。 npm install async-lock 以降は使い方になります。 execute function を使う場合 コールバック関数を抜けてからロックが解放されます。execute functionでのエラーをコールバック関数で判定する必要があります。 実行結果 node async-lock-sample-execute.jsを実行し、ブラウザから/start-lock > /start-lock2の順に実行した場合の実行結果(ログ)です。 16206946945

                                            async-lockを使った排他制御
                                          • Django で楽観的排他制御を簡単に実装する方法(初級者向け) - akiyoko blog

                                            この投稿は 「Django Advent Calendar 2020 - Qiita」 4日目の記事です。 akiyoko です。 この記事では、Django で簡単に楽観的排他制御を実装する方法について説明します。Django の楽観的排他制御については拙著『現場で使える Django REST Framework の教科書』の第11章「現場で使える Tips 集」の中でも触れていますが、もう少し詳しく解説してみたいと思います。 目次 はじめに 楽観的排他制御と悲観的排他制御 READ COMMITTED の挙動 django-concurrency パッケージを利用する まとめ 宣伝 検証環境 Windows 10 Home Django 3.1 PostgreSQL 13.1 はじめに 複数ユーザからほぼ同じタイミングで同じレコードに対して更新をおこなうと、タイミングによってはレース

                                              Django で楽観的排他制御を簡単に実装する方法(初級者向け) - akiyoko blog
                                            • C# によるマルチスレッドアプリケーションと lock 文による排他制御

                                              ここでは、C# でのマルチスレッドプログラミングの最初の話題として、 マルチスレッドプログラムで排他制御しないと、簡単にデータが壊れちゃいますよ、ということを実験しながら確認して、 それに対する対策を簡単に紹介します。 マルチスレッドプログラムでデータが壊れる例 まずは、次のコードを実行してみましょう。 スレッドを 15個作り、それぞれのスレッドから、同じ static で定義した val という int 型の変数を +1 (インクリメント) します。 using System; using System.Threading; class Program { const int THREAD_COUNT = 15; static int val = 0; static void Main(string[] args) { var startTick = Environment.TickCo

                                                C# によるマルチスレッドアプリケーションと lock 文による排他制御
                                              • 排他制御(楽観ロック・悲観ロック)について整理する | みんたく

                                                トラブル知らずのシステム設計 エラー制御・排他制御編を読み、排他制御について理解しイメージできる形でまとめました。 排他制御共有資源に対して複数トランザクションからの操作が見込まれる場合に、同時アクセスにより不整合が発生することを防ぐため、あるトランザクションから共有資源にアクセスしている時は他のトランザクションからはアクセスできないように直列に処理されるようにする制御のこと つまり、システムを複数の利用者が同時に操作するような場合に、一貫して処理するために必要な制御機構が排他制御です。データの一貫性を保証する必要のある範囲(業務トランザクション)を検討し、その範囲で排他制御します。 例えばチームで共有して編集しているファイルがあったとして、メンバー同士で同時に編集してしまった場合データ不整合が起きてしまいます。そのような事態を防ぐために、あるメンバーがファイルを編集している時は、他のメン

                                                  排他制御(楽観ロック・悲観ロック)について整理する | みんたく
                                                • Rubyでロックファイルによる簡易的排他制御 - Qiita

                                                  冪等性がないやアクセス制限などの理由で、同時実行不可という要望はしばしば出てきます。普段ではデータベースに実行フラグを置いたり、RedisやQueueで制御したりするのが一般的ですが、どれも実装コストが高くて、小規模プロジェクトにはコスパがやや高いと思います。 ロックファイルで制御を行えば、データベースの変更などが不要で、手軽いに排他制御ができます。 TD;LR require 'fileutils' DIR_NAME = 'tmp/locks' # 排他制御用ラッパー def synchronized(key = :default_lock) # フォルダーがない時エラーが生じるので、あらかじめ生成しておく FileUtils.mkdir_p(DIR_NAME) lock_file_path = "#{DIR_NAME}/#{key}" File.open(lock_file_path,

                                                    Rubyでロックファイルによる簡易的排他制御 - Qiita
                                                  • 自作OSへの排他制御の実装

                                                    サイボウズラボユースの発表会でのスライドです。

                                                      自作OSへの排他制御の実装
                                                    • システム障害が帰宅ラッシュを直撃 排他制御のバグ、19年目で初めて発覚

                                                      2019年9月25日、東武東上線にトラブルが次々と起こった。人身事故やシカの衝突といった出来事が同日に発生。そのうえ「運行管理システム」まで不具合を起こした。原因は排他制御のバグで、導入19年目に初めて顕在化したものだった。影響は約5万4000人、遅延は最大6時間14分に及んだ。 「運転再開を見込んでおりません」。2019年9月25日、東武東上線成増駅の掲示板に出ていた文言がツイッターで大きな話題となった。 この日、東武東上線はダイヤの大幅な乱れにより、沿線各駅の構内は電車に乗れなかった人々であふれかえっていた。普通は「運転の再開時刻は未定です」などと赤い字で書かれた案内が出るが、成増駅では冒頭のように風変わりな表現となってしまった。運転再開の見通しが立たないことによる混乱ぶりがうかがえる。 東武東上線は同日、池袋-小川町駅間で運転を見合わせ、上下線で合計103本が運休。午後に最大で6時間

                                                        システム障害が帰宅ラッシュを直撃 排他制御のバグ、19年目で初めて発覚
                                                      • SpringFrameworkのスケジューリング機能と排他制御 - Qiita

                                                        はじめに SpringFrameworkには、起動しているアプリケーションから非同期の処理を実行できる機能が提供されており、非同期処理を実行する方法がいくつかあります。その中の1つである スケジューラー @Scheduled を使った定期実行の方法と、そのスケジューラーの多重起動の防止を行うShedLockを紹介します。 スケジューラー機能の使い方 SpringBootを使った設定は以下の通りです アプリケーション起動クラスないしは設定クラスに@EnableSchedulingを付与する 一定間隔で非同期実行をするメソッドに@Scheduledを付与する(Springのコンテキストに登録してあるクラスのみ対象。) 具体的なコード例は次の通りです。 アプリケーション起動クラス、ないしは設定クラスにて@EnableSchedulingを付与しておけば、あとはスケジュール実行したいメソッドに @

                                                          SpringFrameworkのスケジューリング機能と排他制御 - Qiita
                                                        • DBの基礎理論(2)【排他制御、ロック、トランザクション管理、ACID特性】

                                                          ここでまとめている内容はDBの基礎理論(1)に引き続き「データベーススペシャリスト試験」等で出題される、DBの実装理論です。 具体的に実装する方法は各DBMS製品ごと微妙に違いますが、理論として全ての製品に共通するものです。特にトランザクションはDBにおいて根幹をなす非常に重要な理論ですので、抑えておくようにして下さい。 1.排他制御(ロック) 排他制御(ロック) 排他制御(ロック)とは、複数のユーザーが同じレコードを同時に利用した場合でもデータの矛盾を発生させないための仕組みのことを言います。 もし、ロックを行わなかった場合、複数のユーザーが同時にデータ更新を行った場合、不整合が発生してしまいます。この為、一方のユーザーが更新中のデータは他のユーザーが更新できないようにデータをロックすることで、データの整合性を守ります。 ロックの種類 大きくは 共有ロック 占有ロック の2つです。 占有

                                                          • Node.js で排他制御。async-lock を使ってみた - Neo's World

                                                            Node.js で排他制御。async-lock を使ってみた Express サーバのとあるリクエストについて、同時にリクエストがあっても順に処理する必要が出た。すなわち、排他制御をかけ、同時に処理が行われないようにしたかったのだ。 それを実現してくれる async-lock というライブラリを見つけたので、使い方を紹介する。 GitHub - rogierschouten/async-lock: Lock on asynchronous code for Nodejs async-lock をインストールする 今回は TypeScript ベースで Express サーバを作っていて、そこに async-lock を追加するテイで紹介するので、Definitely Typed パッケージもインストールしておく。 $ npm init -y $ npm install --save ex

                                                            • IT試験の受験者情報が漏れた昨年の事件、排他制御をかけ忘れた理由

                                                              本特集は、日経コンピュータの看板コラム「動かないコンピュータ」の過去記事の中から、セキュリティー関連の事例を14本取り上げていく。トラブルの真相から、今後のリスク回避につなげてほしい。 情報処理推進機構が主催するIT試験の会員サイトから個人情報が漏洩した。団体受験した企業が自社の受験者リストをダウンロードすると、他社の受験者情報が混入するトラブルが起こった。排他制御をかけ忘れるという初歩的なミスがあった。複数の企業がほぼ同時に操作した時に限って表面化するバグが原因だった。 「誰だろう、この松橋竹夫(仮称)という人は。当社の従業員ではないようだが」―。 従業員のITスキル向上に力を入れている、ある企業(仮にA社とする)の担当者は首をかしげた。「ITパスポート試験」を受験する自社社員のリストを申し込み用のWebサイトからダウンロードしたところ、見慣れない名前が数十件混じっていたからだ。 情報処

                                                                IT試験の受験者情報が漏れた昨年の事件、排他制御をかけ忘れた理由
                                                              • 排他制御における楽観ロックと悲観ロックについて – Rainbow Engine

                                                                <目次> (1) 排他制御における楽観ロックと悲観ロックについて (1-1) 楽観的排他制御 ●概要・仕組み ●イメージ図 ●楽観的排他制御で起こり得る問題 (1-2) 悲観的排他制御 ●概要・仕組み ●イメージ図 ●楽観的排他制御で起こり得る問題 (1) 排他制御における楽観ロックと悲観ロックについて システムにおいて、例えば「誰かが編集している明細を、別の人が開いた時には『読み取り専用モード』で開く、といった要件があった場合、「排他制御」の導入が必要となってきます。今回はその排他制御の種類である「楽観的排他制御」と「悲観的排他制御」の概要についてご紹介します。 (1-1) 楽観的排他制御 ●概要・仕組み

                                                                • GASの排他制御(ロック)の利用方法を調べた - Qiita

                                                                  はじめに ここでいう排他制御(ロック)とは「何かの処理中は他の処理は待たせる」といった類いのものです。 自分自身、 GAS 以外の開発では排他に触れていたものの GAS では経験が無く、そのうち必要になるかなと思い気になったので調べてみました。 わかったことをまとめました。 対象の方 基本的な JavaScript が読める方 GAS で何かを作ったことがある方 ロックの利用手順 GAS で提供されるロック機能は、以下の流れで利用します。 LockService から目的に応じた Lock オブジェクトを取得 取得した Lock の tryLock() や waitLock() を実行しロックを取得 (ここで排他制御開始) 排他が必要な処理が終わったら Lock の releaseLock() でロックを開放 (ここで排他制御終了) まず利用するロックの種類を決めて、排他制御を開始し、用事

                                                                    GASの排他制御(ロック)の利用方法を調べた - Qiita
                                                                  • その18 シェルスクリプトで学ぶ排他制御

                                                                    並行プログラミングには欠かせないものの理解が難しい排他制御について、シェルスクリプトを使って解説しました。 テキスト https://speakerdeck.com/sat/sierusukuriputodexue-bupai-ta-zhi-yu

                                                                      その18 シェルスクリプトで学ぶ排他制御
                                                                    • CakePHP3での重複予約排他制御について

                                                                      MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。 PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

                                                                        CakePHP3での重複予約排他制御について
                                                                      • Go | sync.Mutexによる排他制御(Lock, Unlock) - わくわくBank

                                                                        goroutineによる並行処理で共有リソースにアクセスしなければならないとき、排他制御が必要になります。ここでは、sync.Mutexを利用した排他制御の実装方法を確認します。(mutexは、mutual exclusionの略です。) package main import ( "fmt" "sync" ) type counter struct { v map[string]int } func (c *counter) Inc(wg *sync.WaitGroup) { defer wg.Done() c.v["wakuwaku"]++ } func main() { wg := sync.WaitGroup{} c := counter{v: make(map[string]int)} for i := 0; i < 1000; i++ { wg.Add(1) go c.Inc(

                                                                          Go | sync.Mutexによる排他制御(Lock, Unlock) - わくわくBank
                                                                        • Zephyr入門(排他制御:mutex編) - Qiita

                                                                          本稿は、できる限り多くの方、特にRTOSの勉強がてら拝見されている方にはぜひ読んでいただきたいと考えます。本稿で扱っているmutexの機構は、RTOSで非常に重要な役割であり、Zephyrに限らず、どのRTOSでも同様の実装がされているためです。 ちなみにLinuxでも優先度継承機能を備えています。 排他制御とは 皆さんご存知だと思いますが、同一のリソースを複数のスレッドが同時にアクセスして、システムに不整合が発生することを防ぐための機能を排他制御と言います。 競合はスレッド間、スレッドと割込み処理、割込み処理間などが考えられます。 これまでに出てきたirq_lock ( )はスレッドと割込みの競合や割込み間の競合を防ぎ、本稿で説明するmutexはスレッド間の競合を防ぎます。 mutexについては下記3つのシステムコールを用意しています。 void k_mutex_init(struct

                                                                            Zephyr入門(排他制御:mutex編) - Qiita
                                                                          • 【Java】マルチスレッド処理 - 排他制御 - Qiita

                                                                            マルチスレッド処理ではデータ共有に注意 マルチスレッド処理ではデータがスレッド間で共有されているかどうかを意識する 共有データに複数のスレッドが同時に処理実施するとデータ矛盾が発生してしまう! NG例 メインスレッドで用意したvalueフィールドを10万個のスレッドで並行してインクリメントする例(結果は10万を期待) //NG例 public class SynchronizedNotUse { //複数スレッドで共有するデータ private int value = 0; //10万個スレッド実行 public static void main(String[] args) { final int TASK_NUM = 100000; var th = new Thread[TASK_NUM]; var tb = new SynchronizedNotUse(); //スレッド生成、実行

                                                                              【Java】マルチスレッド処理 - 排他制御 - Qiita
                                                                            • Laravel+MySQLの排他制御のテスト - Qiita

                                                                              ※自分用メモなので理解しがたい部分あり PHP ver 7.1.8 Laravel ver5.8 MySQL ver5.7.18 トランザクション分離レベル:REPEATABLE-READ select @@global.tx_isolation, @@session.tx_isolation; ↓my.cnf内↓ [mysqld] autocommit=1 ■排他制御のテストするきっかけ 排他制御を見直す場面があり、laravelの排他制御を組み込んではいたが実際に動作確認をしたことがなかった。 実際に動作確認をするとなると並行して多数の同時アクセスを再現しなくてはいけない。 ■テスト準備 ・composer.jsonを開く ↓guzzlehttp/guzzleがインストールされているのか確認↓ "require": { "guzzlehttp/guzzle": "^6.3", }, ・

                                                                                Laravel+MySQLの排他制御のテスト - Qiita
                                                                              • ITRON 割り込み禁止による排他【タスクと割り込みの排他制御】

                                                                                こんにちは、ナナです。 ここまで「セマフォ」や「ミューテックス」を利用した排他制御について解説してきました。 注意することとして、これらの排他制御は、タスク間において利用する機能であるということです。 しかし、ITRONでは「非タスク」と呼ばれる割り込み処理が存在します。 ここで問題となるのが、「タスク」と「割り込み」の間で行うべき排他処理は「セマフォ」や「ミューテックス」は使えないということなのです。 それでは、割り込みにおける排他制御方法を解説しましょう!

                                                                                  ITRON 割り込み禁止による排他【タスクと割り込みの排他制御】
                                                                                • 【Cloud Run Jobs】定期実行で排他制御を実現する

                                                                                  はじめに こんにちは! テラーノベルでサーバーサイドを担当している@yuhasです。 最近は業務でCloud RunやCloud Run Jobsを使うことが多いのですが、その中でCloud Run Jobsの定期実行での排他制御を実現しました。これは色々と工夫が必要なことで、そのやり方を紹介します。 定期実行での排他制御とはつまり、毎分の定期実行を行いつつも、同時に複数の実行が行われないようにするためにはどう制御するか、というような話になります。 Cloud Run JobsとCloud Schedulerについて Cloud Run Jobsはコンテナの実行環境です。コンテナのイメージを渡してあげるだけで簡単に実行することができます。実行間隔や実行時間についてはさまざまな制御を行うことができますが、Cloud Schedulerを利用するのが簡単です。Cloud Run Jobsの「ト

                                                                                    【Cloud Run Jobs】定期実行で排他制御を実現する