【发布时间】:2016-06-05 08:51:00
【问题描述】:
我已经定义了以下内容:
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() 将返回值 before 进行添加,因此必须在后验增加它。 我错过了什么吗?
【问题讨论】: