在互斥体上使用原子的主要原因是互斥体很昂贵,但是使用默认的内存模型,这atomics
不是memory_order_seq_cst
一样昂贵吗?
问题:使用锁的并发程序能否与并发无锁程序一样快?
如果是这样,除非我想用于原子,否则可能不值得付出努力memory_order_acq_rel
。
编辑:我可能遗漏了一些东西,但基于锁的不能比无锁更快,因为每个锁也必须是一个完整的内存屏障。但是对于无锁,可以使用比内存屏障限制更少的技术。
所以回到我的问题,无锁是否比基于新 C++11 标准的默认锁更快memory_model
?
“以性能衡量时,无锁 >= 基于锁”是真的吗?假设有 2 个硬件线程。
编辑2:我的问题不是关于进度保证,也许我在上下文之外使用“无锁”。
基本上,当您有 2 个线程共享内存时,您需要的唯一保证是,如果一个线程正在写入,则另一个线程无法读取或写入,我的假设是简单的原子compare_and_swap
操作比锁定互斥锁快得多.
因为如果一个线程甚至从未接触过共享内存,您最终将无缘无故地一遍又一遍地锁定和解锁,但使用原子操作您每次只使用 1 个 CPU 周期。
关于评论,当争用很少时,自旋锁与互斥锁是非常不同的。