Tom*_*err 29 c++ multithreading mutex memory-model memory-barriers
如果我锁定std::mutex遗嘱,我总会得到一个记忆围栏?我不确定它是暗示还是强迫你获得围栏.
更新:
根据RMF的评论发现此参考文献.
Alo*_*ave 15
据我了解,这包含在:
1.10多线程执行和数据竞争
第5段:
该库定义了许多原子操作(第29条)和对互斥锁(第30条)的操作,这些操作被特别标识为同步操作.这些操作在使一个线程中的分配对另一个线程可见时起到特殊作用.在一个或多个存储器位置上的同步操作是消费操作,获取操作,释放操作,或获取和释放操作两者.没有相关内存位置的同步操作是围栅,可以是获取围栏,释放围栏,也可以是获取和释放围栏.此外,还有轻松的原子操作,它们不是同步操作,还有原子读 - 修改 - 写操作,它们具有特殊的特性.[注意:例如,获取互斥锁的呼叫将对包含互斥锁的位置执行获取操作.相应地,释放相同互斥锁的调用将在这些相同位置执行释放操作.非正式地,对A执行释放操作会强制其他内存位置上的其他内存位置对其他线程可见,以后对A执行消耗或获取操作."轻松"原子操作不是同步操作,即使像同步操作一样,他们不能参与数据竞赛. - 尾注]
R. *_*des 11
解锁互斥锁同步锁定互斥锁.我不知道编译器对实现有什么选择,但是你得到了相同的栅栏效果.