gpt4 book ai didi

c++ - 从可能由不同线程修改的位集 (C++) 访问(读取)位是否安全

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:22 24 4
gpt4 key购买 nike

这种手术安全吗? (换句话说,如果位集在不同的线程上被修改,就没有机会读取一些虚假的中间值)?具体来说,我只对读取是否安全感兴趣,换句话说,我不问从两个单独的线程写入位集是否安全。

例如:无论 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);
// ...

最佳答案

以这种方式使用 std::bitset线程安全的。

这是标准关于访问位集的说法 (§ 20.9.2.2-51):

For the purpose of determining the presence of a data race, any access or update through the resulting reference potentially accesses or modifies, respectively, the entire underlying bitset.

因此,在另一个执行线程中写入 bitset 对象同时从中读取是数据竞争(会触发未定义的行为)。即使所有线程都使用不同的索引访问 bitset 对象。

关于c++ - 从可能由不同线程修改的位集 (C++) 访问(读取)位是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46367660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com