[過去ログ]
マルチスレッドプログラミング相談室 (986レス)
マルチスレッドプログラミング相談室 http://toro.5ch.net/test/read.cgi/tech/997345868/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
452: デフォルトの名無しさん [] 02/09/01 23:27 >>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の本とかでは ここらへんが重要な話として載ってるよ。 http://toro.5ch.net/test/read.cgi/tech/997345868/452
453: 名無し人間 [sage] 02/09/01 23:57 >>452 > それはスレッドライブラリ側のバグ。 > さらに、緩いメモリモデルをとっているアーキテクチャ上の > スレッドライブラリではlock, unlockの際に適切なメモリバリア命令を > 実行していたりもする。 これは標準Cから逸脱している特定のシステムの話では? http://toro.5ch.net/test/read.cgi/tech/997345868/453
456: 名無し人間 [sage] 02/09/02 00:32 >>454 >>452=458だと思てるんで、 > そのコードだとGをvolatile宣言する必要はナシ。 も含めてちと言い過ぎじゃないのかなと。 http://toro.5ch.net/test/read.cgi/tech/997345868/456
457: 名無し人間 [sage] 02/09/02 00:33 アウ! >>456 > >>452=458だと思てるんで、 < >>452=448だと思てるんで、 http://toro.5ch.net/test/read.cgi/tech/997345868/457
458: 442 [sage] 02/09/02 02:48 >>452 なんとなくわかりました。 たとえvolatileがなくても、lock/unlock の前後では必ず メモリに反映されるような実装になっている(はずである)。 ということですね。 どうもありがとうございます。 http://toro.5ch.net/test/read.cgi/tech/997345868/458
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.028s