「競合状態」の版間の差分
提供: セキュリティ
(ページの作成:「ソフトウェアにおける競合状態 (レースコンディション, Race Condition, レースハザード, Race Hazard) とは、ロックや同期の処理...」) |
|||
(同じ利用者による、間の1版が非表示) | |||
行1: | 行1: | ||
− | ソフトウェアにおける[[競合状態]] (レースコンディション, Race Condition, レースハザード, Race Hazard) | + | ソフトウェアにおける[[競合状態]] (レースコンディション, Race Condition, レースハザード, Race Hazard) とは、排他制御/ロックや同期の処理をしない場合に、複数のプロセスや'''スレッド'''が同時に処理をした場合に、処理結果が間違った状態になってしまうことをいいます。 |
'''読み方''' | '''読み方''' | ||
行10: | 行10: | ||
== 概要 == | == 概要 == | ||
− | |||
単一のコンピュータで、単一のプロセスが動作しているような環境では、[[競合状態]] といった問題は、ありませんでした。 | 単一のコンピュータで、単一のプロセスが動作しているような環境では、[[競合状態]] といった問題は、ありませんでした。 | ||
− | + | 複数のコンピューター、マルチプロセス、'''マルチスレッド'''が同じリソースを共有している場合に、お互いに競合する可能性があります。[[Unix]] ライクのシステムでは、 /tmp や /var/tmp などのディレクトリで競合状態を起こしやすくなります。複数の[[データベース]] をアトミックに処理しなければならない場合にもそうでしょう。 | |
− | + | ||
== 競合状態を解決する == | == 競合状態を解決する == | ||
− | |||
典型的な[[競合状態]]の解決策は、プログラム・プロセスは、ファイル、デバイス、オブジェクト、変数などを操作する場合に、対象となるリソースの独占権を保証することです。 | 典型的な[[競合状態]]の解決策は、プログラム・プロセスは、ファイル、デバイス、オブジェクト、変数などを操作する場合に、対象となるリソースの独占権を保証することです。 | ||
− | リソースの独占するために、 | + | リソースの独占するために、'''ロック'''という処理を行います。 |
− | + | '''ロック''' を正しく扱わないと、'''デッドロック''' を起こします。'''デッドロック''' は、お互いにロックされたリソースの解放を待ってしまい、処理が進まなくなってしまうことをいいます。 | |
ロックを同じ順序で取得するように、設計すれば、予防できるでしょう。 | ロックを同じ順序で取得するように、設計すれば、予防できるでしょう。 | ||
− | 正しい | + | 正しい '''ロックファイル''' を作ることも重要です。 |
また、 /tmp や /var/tmp などの共有ディレクトリを扱う場合にも注意が必要です。 | また、 /tmp や /var/tmp などの共有ディレクトリを扱う場合にも注意が必要です。 | ||
− | |||
− | |||
== 関連項目 == | == 関連項目 == | ||
* [[クリティカルセクション]] | * [[クリティカルセクション]] | ||
− | * | + | * '''ミューテックス''' |
− | * | + | * '''セマフォ''' |
− | * | + | * '''ロック''' |
− | * | + | * '''デッドロック''' |
+ | * '''排他制御''' | ||
<!-- | <!-- | ||
vim: filetype=mediawiki | vim: filetype=mediawiki | ||
--> | --> |
2015年9月22日 (火) 14:38時点における最新版
ソフトウェアにおける競合状態 (レースコンディション, Race Condition, レースハザード, Race Hazard) とは、排他制御/ロックや同期の処理をしない場合に、複数のプロセスやスレッドが同時に処理をした場合に、処理結果が間違った状態になってしまうことをいいます。
読み方
- 競合状態
- きょうごう じょうたい
- レースコンディション
- れーす こんでぃしょん
- Race Condition
- れーす こんでぃしょん
- レースハザード
- れーす はざーど
- Race Hazard
- れーす はざーど
概要
単一のコンピュータで、単一のプロセスが動作しているような環境では、競合状態 といった問題は、ありませんでした。
複数のコンピューター、マルチプロセス、マルチスレッドが同じリソースを共有している場合に、お互いに競合する可能性があります。Unix ライクのシステムでは、 /tmp や /var/tmp などのディレクトリで競合状態を起こしやすくなります。複数のデータベース をアトミックに処理しなければならない場合にもそうでしょう。
競合状態を解決する
典型的な競合状態の解決策は、プログラム・プロセスは、ファイル、デバイス、オブジェクト、変数などを操作する場合に、対象となるリソースの独占権を保証することです。 リソースの独占するために、ロックという処理を行います。
ロック を正しく扱わないと、デッドロック を起こします。デッドロック は、お互いにロックされたリソースの解放を待ってしまい、処理が進まなくなってしまうことをいいます。 ロックを同じ順序で取得するように、設計すれば、予防できるでしょう。
正しい ロックファイル を作ることも重要です。 また、 /tmp や /var/tmp などの共有ディレクトリを扱う場合にも注意が必要です。
関連項目
- クリティカルセクション
- ミューテックス
- セマフォ
- ロック
- デッドロック
- 排他制御