このタイプの操作は安全であると考えられますか? (言い換えれば、ビットセットが別のスレッドで変更されている場合、偽の中間値を読み取る機会はありません)?具体的には、読み込みが安全かどうかだけに興味があります。言い換えれば、2つの別々のスレッドからビットセットに書き込むことが安全かどうかは問いません。別のスレッドによって変更されるビットセット(C++)からビットをアクセス(読み込み)することは安全ですか
例:スレッド1は、bsの他のビットが同時にセット/クリアされているかどうかにかかわらず、確実にビット5の現在の状態を取得しますか?
std::bitset<64> bs;
//thread 1:
bool val;
val=bs.test(5);
// ...
//thread 2:
// set/clear a few bits
bs.set(1);
bs.set(3);
bs.set(5);
bs.reset(6);
// ...
スタンダードライブラリコンテナは、並行読み込みと書き込みの際にスレッドセーフではありません。 –
あなたは半分読むことができると思いますか?そのようなことはありません。スレッドAがビットを読み取ってスレッドBをセットするのを待っている場合、それは問題ありません。大きな画像が問題になることがあります。 – lakeweb
@ lakeweb私の懸念は半分ではなく、スレッドBが* different *ビットを設定していると、ビットスレッドAが一時的に異なる状態になる可能性があります。 –