我定义了以下内容:
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()将在之前返回值,因此必须在后验中增加它。 我错过了什么吗?
答案 0 :(得分:0)
编辑后,代码现在没有意义。 operator++
是.fetch_add(1)
的简写,但它返回普通int
。你不能在此问候load
,也没有任何意义。