非原子对象在所有线程中都有相同的修改顺序吗?(在没有数据竞赛的情况下)



1.10/6:

对特定原子对象M的所有修改都以某种特定的总顺序发生,称为修改M.订单

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

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

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

通常,如果一个线程更新非原子变量,而另一个线程访问(更新或读取)该变量,而这两个操作之间没有适当的同步,则会出现数据竞赛。数据争用会导致未定义的行为。

如果您"正确同步"对非原子变量的访问,那么在另一个(当然是同一个)线程中的任何修改和任何访问之间的关系之前,都会发生。这包括任何两个修改之间的关系。

这种情况发生在关系在所有线程中都有效之前,并在修改之间产生一个总的顺序。所以,是的:正确同步的使用会给你一个总的修改顺序(对于使用相同同步操作同步的所有变量来说,这甚至是相同的)。

最新更新