2

1.10/6:

对特定原子对象 M 的所有修改都以某个特定的总顺序发生,称为 M 的修改顺序。

非原子对象在所有线程中也有相同的修改顺序吗?我对正确同步的案例(没有数据竞争等)感兴趣。

4

1 回答 1

4

您需要在所有参与线程之间进行同步。

如果您有一个(或多个)线程更新一个非原子值(在它们的组之间进行任何数量的同步操作)并且另一个线程读取该值(不与任何更新线程同步),您甚至不能保证您将读取其他线程已存储的值之一。

通常,如果一个线程更新了一个非原子变量,而另一个线程访问(更新或读取)它,而这两个操作之间没有适当的同步,那么就会发生数据竞争。数据竞争会导致未定义的行为。

如果您“正确同步”对非原子变量的访问,您将在任何修改和另一个(或当然相同的)线程中的任何访问之间具有发生前的关系。这包括任何两个修改之间的关系。

这种发生前的关系在所有线程中都是有效的,并且在修改之间产生了一个总顺序。所以,是的:正确同步的使用为您提供了一个完整的修改顺序(甚至对于使用相同同步操作同步的所有变量也是相同的)。

于 2013-02-10T18:33:04.480 回答