C++相談室 part166 (573レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
570: (ワッチョイ cda1-2ooF) 08/04(月)06:40 ID:0gfRmGh70(1/3) AAS
ちょっ質問なのですが
unsigned long m_ulAbortReasonBmp;
std::mutex m_mutex;
std::atomic<unsigned long> m_ulBias;
に対し、
m_mutex.lock();
m_ulAbortReasonBmp |= fooBmp; // (1) : m_mutex.lock()期間内
m_mutex.unlock();
m_ulBias.store(barVal, std::memory_order_release); // (2) : m_mutex.lock()期間外だがm_mutex.lock()期間の後
としたとき、
省2
571: (ワッチョイ cda1-2ooF) 08/04(月)07:34 ID:0gfRmGh70(2/3) AAS
Q1については、他スレッドから見てm_ulBiasのreadが
m_mutex.lock()期間(クリティカルセクション)内のm_ulAbortReasonBmpへの書き込みより
先行するようなことが起きるとクリティカルセクションの意味が消失するから保証される
Q2についてはm_ulBiasのreadがプロセッサコアにどう計画されるかわからないから
m_ulAbortReasonBmpへの書き込みの後になることは一般に保証されない、
が、現在人類が手にしているクリティカルセクションの実装(lock期間に入るときと出るときそれぞれで
いかなるreadもwriteも無差別にバリアする)により、lockしないスレッドから見ても順序が実質的に保証される、
でおk?
572: (ワッチョイ cda1-2ooF) 08/04(月)08:33 ID:0gfRmGh70(3/3) AAS
訂正orz、
Q2のケースでは保証されない
現在人類が手にしているクリティカルセクションの実装(lock期間に入るときと出るときそれぞれで
いかなるreadもwriteも無差別にバリアする)のが真実だとしても、
それはm_ulAbortReasonBmpやm_ulBiasをwriteする側のスレッドがwrite順を守るというだけで、
m_ulAbortReasonBmpやm_ulBiasをreadする側のスレッドにはメモリバリアするコードが無いから
read順を好きに計画され、writeした順でreadされる保証が無い
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.423s*