クリティカルセクション


 (: critical section) 







(一)

(二)1

(三)



1

排他制御を使用しない場合

編集

100

AAA110021013BBBB100A3B101AA3101A

AB22102101

沿
ディスク上の値 スレッドA(値) スレッドB(値)
100 スレッド発生
100 処理1(100)
100 処理2(101)
100 待機 スレッド発生
100 処理1(100)
100 処理2(101)
101 処理3(101)
101 スレッド終了
101 処理3(101)
101 スレッド終了

排他制御を使用した場合

編集

1使使 (lock) 



1

A123BABAB

沿CS
ディスク上の値 スレッドA(値) スレッドB(値) CSの所有者
100 スレッド発生
100 CSに入る スレッドA
100 処理1(100)
100 処理2(101)
100 待機 スレッド発生
100 CSに入ることに失敗
101 処理3(101) 待機
101 CSから出て、スレッド終了
101 CSに入る スレッドB
101 処理1(101)
101 処理2(102)
102 処理3(102)
102 CSから出て、スレッド終了

API

Microsoft Windows使Windows APICRITICAL_SECTIONEnterCriticalSection(), LeaveCriticalSection()[1]Windows使[2]

POSIX (Pthreads) pthread_mutex_t使Windowspthread_mutexattr_setpshared()PTHREAD_PROCESS_SHAREDpthread_mutex_t使

JavaC#

脚注

編集

関連項目

編集