マルチスレッドプログラミング相談室 その6at TECH
マルチスレッドプログラミング相談室 その6 - 暇つぶし2ch457:デフォルトの名無しさん
08/01/27 01:23:45
>>455
Mutexの開放とEvent待ちをアトミックに行うことができないから。

たとえばここ URLリンク(docs.sun.com)
の一番下にあるようなコードの、pthread_mutexをCriticalSectionに置き換えて、
pthread_condを自動リセットのEventに置き換えたとすると、

バッファが空の状態で、スレッドAがデータを取り出そうとする
Event待ちの寸前でコンテキストスイッチ
まだバッファが空の状態で、スレッドBがデータを取り出そうとする
Event待ちの寸前でコンテキストスイッチ
スレッドCがデータを投入
スレッドCがSetEvent
スレッドCが再度データを投入
スレッドCがSetEvent
スレッドAがイベント待ちに入り、すぐ戻る
スレッドAがデータ取り出し完了
スレッドBがイベント待ちに入る。データがあるのにイベント待ちから戻れない

となる恐れがない? (CSのEnter/Leaveは省きました)

URLリンク(www.linux.or.jp) の、
> 条件変数はいつでも mutex と結びつけられていなければならない。これは、あるスレッドが条件変数を
> 待とうとしている時に、他のスレッドが、先のスレッドが実際に条件変数に対して待機するその直前に
> 条件を送信する、という競合条件を避けるためである。
を参考にしました。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch