マルチスレッドプログラミング相談室 その6at TECHマルチスレッドプログラミング相談室 その6 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト50:デフォルトの名無しさん 07/08/18 18:20:44 上のやつとか。 CPU(とメモリ)依存処理ばかりなのになんでだろう。 51:デフォルトの名無しさん 07/08/18 18:43:55 ソースアップしてくれんとわからんね。起動やJITにかかってる時間も含んでる? 52:デフォルトの名無しさん 07/08/18 19:00:11 計測は、できるだけ実際の実行部分だけになるように 一応注意してやってはいるんだけどねぇ。 今外なのでソースは出せんが、ゲートとカウントダウンラッチ使って 間の時間を計測してる。計測精度は問題ないものを使ってる。StopWatchね。 ラッチは自作だけど、100万回ループの最初と最後だから 実装がいまいちでもまあそれほど大きな影響はないはず。 スレッドが多いほど処理スレッドに割り当てられるCPU時間が ある程度は増えるかも知れないが、5倍てのはそういう問題の範囲じゃないと思うんだよね。 53:デフォルトの名無しさん 07/08/18 19:06:12 >>39-40 物凄くレアなケースだが、いわゆるABA問題にハマる可能性があるよね。 キューが空のときに、Enqueue()の > if (next == m_tail || m_buffer[current].Stored) return false; の行の実行が終わった直後にコンテキストスイッチが入るなどして、次の > } while (Interlocked.CompareExchange(ref m_head, next, current) != current); が実行されるまでの間に別スレッドがcapacity + 1回のEnqueue()と1回のDequeue()を行ったとすると、 キューが満杯なのにCompareExchangeが成功してしまう。 同じことはDequeue()側でも起こりうるね。(キューが満杯のとき、Dequeue()内のif文と CompareExchangeの間で別スレッドがcapacity + 1回のDequeue()と1回のEnqueue()を行った場合とか) こういう問題への対策法としては、capacityを十分大きくしておくくらいしか 思いつかないけど…… 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch