原子性是否在std :: atomic操作之间保留?

时间:2016-02-23 13:29:07

标签: c++11 std atomic

我定义了以下内容:

std::atomic_int m_decoding_thread_count;

可以确保以下内容是原子的吗?或者我可以将load()的结果与++的结果不同?即两个线程是否可以分配相同的thread_id?

int thread_id = (++m_decoding_thread_count).load();

更新

正如在this response中正确指出的那样,上面的代码不能编译(我的坏)。我看到的替代方案是:

选项1:

++m_decoding_thread_count;
int thread_id = m_decoding_thread_count.load();

选项2:

int thread_id = m_decoding_thread_count.fetch_add(1)++;

我可以看到选项1不是原子的。另一方面,选项2几乎可以是原子的,除了我对文档的理解之外,fetch_add()将在之前返回值,因此必须在后验中增加它。 我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

编辑后,代码现在没有意义。 operator++.fetch_add(1)的简写,但它返回普通int。你不能在此问候load,也没有任何意义。