这种类型的操作被认为是安全的吗?(换句话说,如果在不同的线程上修改 bitset,则没有机会读取一些虚假的中间值)?具体来说,我只对读取是否安全感兴趣,换句话说,我不是在问从两个单独的线程写入位集是否安全。
例如:无论 bs 中的其他位是否同时被设置/清除,线程 1 能否可靠地获得位 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);
// ...
Run Code Online (Sandbox Code Playgroud)