为什么std :: atomic <integral>特化不提供乘法和除法赋值运算符?</integral>

时间:2012-03-22 15:04:13

标签: c++ multithreading c++11 atomic atomicity

对于整数类型,std :: atomic的完全特化提供了算术复合赋值运算符,例如+=-=,但没有*=/=。标准说明了这一点,但据我所知,没有理由给出。熟悉原子操作图书馆部分背后原因的人是否可以对此有所了解?

1 个答案:

答案 0 :(得分:12)

我认为这与硬件有关。许多平台都有原子来处理+=,但我不知道有哪些提供*=。通过锁定来实现这一点很简单,但是std::atomic的接口将在同一级别的操作中混合,这些操作在某种程度上很便宜并且操作非常昂贵。