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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
170
(8): 05/01/23 22:50 AAS
スレッドの生成や消滅って、implicitなmemory barrierになると考えて良いのでしょうか?
#POSIX, Win32両方使ってます。
172
(2): 170 05/01/24 14:58 AAS
メインスレッドが大域変数gFooに1を、排他制御なしで書く

メインスレッドがスレッドTを生成する

TがgFooの値を排他制御なしで読む

の順で処理が発生したとき、Tが観測するgFooの値が1であることが保証されているかが知りたいです。
メインスレッドは1を書いた後、当面gFooにアクセスしないと仮定してOKです。

よろしくおながいします。
174: 170 05/01/24 18:28 AAS
>>173
> 環境によっては保証されない。
> 何故ならば、大域変数へのアクセス完了を待ってスレッド生成する保証がないから。

gFoo = 1;
// ここ
pthread_create();

というコードで、「ここ」と書いたところはsequence pointで、かつ「ここ」ではまだシングルスレッド
状態なわけですが、それでも「大域変数へのアクセス完了を待つ」が保証されないのでしょうか?

>> スレッドの生成や消滅って、implicitなmemory barrierになると考えて良いのでしょうか?
という質問に戻ってしまうわけですが・・。
182: 170 05/01/24 19:33 AAS
pthread_createやCreateThreadの先頭にmemory barrier(full fence)が挿入され
ているのか、挿入するよう規格が要請しているかが知りたいです。

#またはfenceなどなくても大丈夫というならその理由を
190: 170 05/01/24 21:39 AAS
>>185
> total store order
すみません、memory modeに疎く、TSOだけだとちょっと意図が汲めません。結局>>172の例は
safe/unsafeどちらだとお考えでしょうか?
191: 170 05/01/24 21:40 AAS
mode -> model
192
(3): 05/01/24 21:54 AAS
>>170
volatile とか VC/VC++ の _ReadWriteBarrier とかその辺の問題はともかく、
MSのサンプルでも、Win32のThreadProcで、渡されたデータ、実体はポインタ、
が挿すメモリアクセスするような場合にMemoryBarrier()呼び出しをしている例は
一度も見たことなく、逆の例は沢山あるので、
Win32のCreateThreadはメモリバリアになってるような気がします。

具体的なドキュメント等の記述は見つからないけど。
195
(1): 05/01/25 00:30 AAS
>>170
POSIXではpthread_create()もpthread_join()もMemory Synchronizationが
要請されてますな。
外部リンク[html]:www.opengroup.org
196: 170 05/01/25 12:12 AAS
>>192 195
ありがとうございます!!
スッキリ解決です。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.028s