マルチスレッドプログラミング相談室 その6
at TECH
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドの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を十分大きくしておくくらいしか 思いつかないけど……
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
5389日前に更新/193 KB
担当:undef