[過去ログ] マルチスレッドプログラミング相談室 (986レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
452
(4): 02/09/01 23:27 AAS
>>451
たとえば
mutex L;
int data;
として、スレッドAで
 lock(L);
 dataに代入; // …(1)
 unlock(L);
とした後、スレッドBで
 lock(L);
 dataの利用; // …(2)
 unlock(L);
ってしたとき、たとえvolatile宣言がなかったとしても
(2)において(1)の変更が見えないのはマズイ。
だから、
> 仮にこれらがインライン展開される関数やマクロだった場合に、
> ・lockの直後のif文で G がメモリから再ロードされるかどうか
> ・更新後の Gの値がunlockの前でメモリに書き込まれるかどうか
> が保証されない
なんてことがあったら、それはスレッドライブラリ側のバグ。
さらに、緩いメモリモデルをとっているアーキテクチャ上の
スレッドライブラリではlock, unlockの際に適切なメモリバリア命令を
実行していたりもする。

IA-32ではメモリ書き込み順やキャッシュ一貫性の保証があるんで
こういう話とはほとんど無縁だけど、pthreadの本とかでは
ここらへんが重要な話として載ってるよ。
453
(1): 名無し人間 02/09/01 23:57 AAS
>>452
> それはスレッドライブラリ側のバグ。
> さらに、緩いメモリモデルをとっているアーキテクチャ上の
> スレッドライブラリではlock, unlockの際に適切なメモリバリア命令を
> 実行していたりもする。

これは標準Cから逸脱している特定のシステムの話では?
456
(2): 名無し人間 02/09/02 00:32 AAS
>>454
>>452=458だと思てるんで、

> そのコードだとGをvolatile宣言する必要はナシ。

も含めてちと言い過ぎじゃないのかなと。
457: 名無し人間 02/09/02 00:33 AAS
アウ!

>>456
> >>452=458だと思てるんで、

< >>452=448だと思てるんで、
458: 442 02/09/02 02:48 AAS
>>452
なんとなくわかりました。

たとえvolatileがなくても、lock/unlock の前後では必ず
メモリに反映されるような実装になっている(はずである)。
ということですね。

どうもありがとうございます。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.034s