在他的“原子武器”演讲中,Herb Sutter 演示了一个示例,其中主线程使用以下命令设置停止标志memory_order_seq_cst 和多个工作线程使用 memory_order_relaxed 检查该标志。 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 进行写入操作可以在不影响性能的情况下提供额外的保证。
以上是如果使用'memory_order_relaxed”进行检查,为什么要使用'memory_order_seq_cst”来设置停止标志?的详细内容。更多信息请关注PHP中文网其他相关文章!