修改顺序不是总顺序是什么意思?

问题描述 投票:-1回答:1

每个原子对象都有其自己关联的修改顺序,对该对象进行的修改的这是总顺序。如果从某些线程的角度来看,某个原子M的修改A发生在同一原子M的修改B之前,那么按照M的修改顺序,A发生在B之前。

注意,尽管每个原子对象都有其自己的修改顺序,但不是总顺序;不同的线程可能会以不同的顺序观察到对不同原子对象的修改。

两个大胆的陈述不矛盾吗?我在https://en.cppreference.com/w/c/language/atomic上找到了它们,想知道现在到底在发生什么-是否是总订单?现在到底可以保证什么,而不能保证什么呢?

c atomic
1个回答
1
投票

这确实是cppreference的错误选择。重要的句子实际上是最后一句话:不同的线程可能会观察到对不同原子对象以不同顺序进行的修改

因此,如果原子对象1具有完全有序的修饰序列ABC,而原子对象2具有完全有序的修饰序列DEF,则所有线程在C之前都会看到A,而在F之前看到D,但是线程可能会不同意A是否在D之前。因此,所有修改{A B D C E F}的集合没有总顺序。

但是所有同意B出现在E之前的线程也将同意A出现在F之前。部分订单仍然提供某些保证。

© www.soinside.com 2019 - 2024. All rights reserved.