【发布时间】:2021-11-17 05:12:36
【问题描述】:
如果我有一个向量:
std::vector<std::atomic_bool> v(8);
并且假设我不会在创建后修改它的大小,调用它是否线程安全:
bool result = v[2].compare_exchange_strong(false, true);
* 值 8、2、false 和 true 仅作为示例用例给出。
【问题讨论】:
-
取决于你的目标。
v[2]可以在阅读后立即更改,然后才能使用result。 -
是的,调用此函数是安全的(如 - 效果已明确定义)。但是,您可能需要一个循环和 compare_exchange_weak。
-
@user4581301 即使是独立的
std::atomic_bool也是如此,对吧? -
@user4581301 结果是CAS操作是否成功,而不是v[2]的值
-
我很抱歉,但结果是一样的。 function 是安全的,但您对它的使用可能不安全。
标签: c++ multithreading thread-safety