gpt4 book ai didi

c++ - 在 C++ 中对 std::atomic 使用比较和读/写操作?

转载 作者:太空宇宙 更新时间:2023-11-04 12:50:38 24 4
gpt4 key购买 nike

假设有2线程为 threadAthreadB我们将使用 std::atomic<bool>这些 threads 中的数据类型.所以现在我们有一些关键部分如下:

我的全局变量(线程同时访问它):

std::atomic<bool> flag;

线程A:

void *threadA(void *arg)
{
bool ttt = true;
if(flag == true) // comparison operator ==
// do something

// something to do
flag = false; // assign a avalue
ttt = flag; // read operation

return 0;
}

线程B:

void *threadB(void *arg)
{
bool m = true;
if(flag == true) // comparison operator ==
flag = false;

// something to do
flag = true; // assign a value
m = !flag; // read operation

return 0;
}

无论如何,我知道std::atomic<>不像普通的数据类型是自由竞争,但我想确定这些:

  • 使用==会有什么问题吗? , assignment , read/write而不是(例如)std::atomic_load或交换声明?
  • 有没有可能发生什么问题,比如memory读取或写入 flag 时出现问题?
  • 它在具有任何 CPU 架构的任何平台上都绝对安全吗?我的意思是(一个可移植的代码)。因为atomic<bool>在某些 X86 架构中不需要?

我只想使用 atomic功能而不是 mutex .

最佳答案

will be any trouble when using of ==, assignment, read/write instead of (for example) std::atomic_load or exchange statements?

operator==std::atomic<T> 一起使用和 T , 它首先调用 atomic<T>::operator T()load使用最强内存排序的原子值 std::memory_order_seq_cst .接下来,operator==(T, T)用来。这个序列不是原子的。这意味着当比较实际发生时 std::atomic<T>可能已经改变了。

just wanna use of atomic feature instead of mutex.

您可以使用 std::atomic::compare_exchange_weak 实现带有原子的自旋锁(有一个例子),但它不能像std::mutex那样让线程进入休眠状态。

关于c++ - 在 C++ 中对 std::atomic<bool> 使用比较和读/写操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49225302/

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