std::atomit<int> g_cnt = 0;
g_cnt++; —— OK
g_cnt += 1; —— OK
g_cnt = g_cnt + 1; —— ERROR
一般:++、--、+=、-=、&=、|=、^=等简单运算符的运算是原子的,其他的一些复杂表达式的运算就不一定是原子的了。
还有:
std::atomic<bool> g_bool =false;
能用原子解决的,用互斥量也可以解决(m_mutex.lock(); cnt++; m_mutex.unlock();)。原子操作的效率要更高一点