1.10/6:
对特定原子对象 M 的所有修改都以某个特定的总顺序发生,称为 M 的修改顺序。
非原子对象在所有线程中也有相同的修改顺序吗?我对正确同步的案例(没有数据竞争等)感兴趣。
1.10/6:
对特定原子对象 M 的所有修改都以某个特定的总顺序发生,称为 M 的修改顺序。
非原子对象在所有线程中也有相同的修改顺序吗?我对正确同步的案例(没有数据竞争等)感兴趣。
您需要在所有参与线程之间进行同步。
如果您有一个(或多个)线程更新一个非原子值(在它们的组之间进行任何数量的同步操作)并且另一个线程读取该值(不与任何更新线程同步),您甚至不能保证您将读取其他线程已存储的值之一。
通常,如果一个线程更新了一个非原子变量,而另一个线程访问(更新或读取)它,而这两个操作之间没有适当的同步,那么就会发生数据竞争。数据竞争会导致未定义的行为。
如果您“正确同步”对非原子变量的访问,您将在任何修改和另一个(或当然相同的)线程中的任何访问之间具有发生前的关系。这包括任何两个修改之间的关系。
这种发生前的关系在所有线程中都是有效的,并且在修改之间产生了一个总顺序。所以,是的:正确同步的使用为您提供了一个完整的修改顺序(甚至对于使用相同同步操作同步的所有变量也是相同的)。