在他的“原子武器”演讲中, Herb Sutter 演示了一个示例,其中主线程使用 memory_order_seq_cst 设置停止标志,并且多个工作线程使用以下命令检查该标志内存顺序放宽。 Sutter 解释说,由于延迟影响可以忽略不计,因此使用 memory_order_relaxed 进行检查是可以接受的。不过,他建议使用 memory_order_seq_cst 来进行设置标志的操作,但没有提供具体原因。
理解内存排序的概念在这里至关重要。内存顺序定义了原子操作提供的可见性和同步保证。在此示例中,使用 memory_order_seq_cst 设置标志可确保以下内容:
使用时考虑到加载操作使用了 memory_order_relaxed,写操作的 memory_order_seq_cst 可能看起来过多,但它实际上没有显着的性能影响。无论使用的内存顺序如何,实现都需要使原子存储在合理的时间内可见。
虽然使用 memory_order_seq_cst 进行写入操作的延迟影响很小,它提供了几个好处:
总而言之,在本例中使用memory_order_seq_cst设置停止标志是不可行的用于性能优化,但要确保正确性和线程安全。虽然 memory_order_relaxed 对于加载操作来说是可以接受的,但使用 memory_order_seq_cst 进行写入操作可以在不影响性能的情况下提供额外的保证。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3