「競合状態」の版間の差分

提供: セキュリティ
移動: 案内検索
 
行1: 行1:
ソフトウェアにおける[[競合状態]] (レースコンディション, Race Condition, レースハザード, Race Hazard) とは、[[排他制御]]/[[ロック]]や同期の処理をしない場合に、複数のプロセスや[[スレッド]]が同時に処理をした場合に、処理結果が間違った状態になってしまうことをいいます。
+
ソフトウェアにおける[[競合状態]] (レースコンディション, Race Condition, レースハザード, Race Hazard) とは、排他制御/ロックや同期の処理をしない場合に、複数のプロセスや'''スレッド'''が同時に処理をした場合に、処理結果が間違った状態になってしまうことをいいます。
  
 
'''読み方'''
 
'''読み方'''
行10: 行10:
  
 
== 概要 ==
 
== 概要 ==
 
 
単一のコンピュータで、単一のプロセスが動作しているような環境では、[[競合状態]] といった問題は、ありませんでした。
 
単一のコンピュータで、単一のプロセスが動作しているような環境では、[[競合状態]] といった問題は、ありませんでした。
  
複数のコンピューター、マルチプロセス、[[マルチスレッド]]が同じリソースを共有している場合に、お互いに競合する可能性があります。[[Unix]] ライクのシステムでは、 /tmp や /var/tmp などのディレクトリで競合状態を起こしやすくなります。複数の[[データベース]] をアトミックに処理しなければならない場合にもそうでしょう。
+
複数のコンピューター、マルチプロセス、'''マルチスレッド'''が同じリソースを共有している場合に、お互いに競合する可能性があります。[[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 などの共有ディレクトリを扱う場合にも注意が必要です。

関連項目