[過去ログ]
マルチスレッドプログラミング相談室 その8 (1001レス)
マルチスレッドプログラミング相談室 その8 http://peace.5ch.net/test/read.cgi/tech/1253521167/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
71: デフォルトの名無しさん [sage] 2009/09/24(木) 01:47:24 すみません初歩的な質問で申し訳ないのですが,mutexで排他制御された場合、例えば mutexlock(); A[0] = 0; mutexunlock(); の様な場合、スレッドAはA[0]をアクセスして、スレッドBはA[100]をアクセスするとします。 その場合、スレッドBはスレッドAの処理が終わるまで配列Aにアクセスできないのでしょうか? http://peace.5ch.net/test/read.cgi/tech/1253521167/71
72: デフォルトの名無しさん [sage] 2009/09/24(木) 01:50:07 >>71 そうなるね http://peace.5ch.net/test/read.cgi/tech/1253521167/72
74: ◆0uxK91AxII [sage] 2009/09/24(木) 04:50:22 >>71 //mutexlock(); A[100] = ~0; //mutexunlock(); :b http://peace.5ch.net/test/read.cgi/tech/1253521167/74
75: デフォルトの名無しさん [sage] 2009/09/24(木) 06:02:29 >>71です。 しょうもない質問をしてすみません。mutexでロックをかけた場合、配列にアクセスする場合はその間配列全体がアクセス禁止になるのか、 それともその一部のみ(例えばキャッシュライン分)がアクセス禁止になるのかを知りたかったのです。 アクセスできないとなると、 int D[10000]位確保されていたとして、 int *A,*B,*C; A = &D[0]; B = &D[1000]; C = &D[2400]; のようにポインタでAの場所を指して、 スレッドA: D[0]〜D[1199]の内容を書き換え、スレッドB:D[1200]〜D[2399]の内容を書き換え、スレッドC:D[2400]〜D[3599]の内容を書き換え、 オーバーラップする領域はまずAの処理を優先するため、その領域を保護するためにmutexでロックをかけている間、 BはAの処理が終わるのを待たなければならないのは分かるのですが、CもAの処理が終わるまで待たなければならないのでしょうか? Thread A: for(i=0;i<1200;i++){ mutexlock(mu); A[i]=100; mutec_unlock(mu); } Thread B: for(i=0;i<1200;i++){ B[i]=200; } Thread C:: for(i=0;i<1200;i++){ C[i]=300; } http://peace.5ch.net/test/read.cgi/tech/1253521167/75
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.036s