标签: c++ multithreading c++11 atomic atomicity
对于整数类型,std :: atomic的完全特化提供了算术复合赋值运算符,例如+=,-=,但没有*=或/=。标准说明了这一点,但据我所知,没有理由给出。熟悉原子操作图书馆部分背后原因的人是否可以对此有所了解?
+=
-=
*=
/=
答案 0 :(得分:12)
我认为这与硬件有关。许多平台都有原子来处理+=,但我不知道有哪些提供*=。通过锁定来实现这一点很简单,但是std::atomic的接口将在同一级别的操作中混合,这些操作在某种程度上很便宜并且操作非常昂贵。
std::atomic