2

1.10/6:

特定のアトミック オブジェクト M に対するすべての変更は、M の変更順序と呼ばれる特定の全体的な順序で発生します。

非アトミックオブジェクトもすべてのスレッドで同じ変更順序を持っていますか? 適切に同期されたケース (データ競合がない場合など) に関心があります。

4

1 に答える 1

4

参加しているすべてのスレッド間で同期が必要です。

1 つ (または複数) のスレッドが非アトミック値を更新し (それらのグループ間で任意の量の同期操作を行う)、別のスレッドがその値を読み取る (更新スレッドと同期せずに) 場合、次のことさえ保証されません。他のスレッドが保存した値の 1 つを読み取ります。

一般に、1 つのスレッドが非アトミック変数を更新し、別のスレッドがこれら 2 つの操作の間で適切な同期をとらずにアクセス(更新または読み取り) すると、データ競合が発生します。データ競合により、未定義の動作が発生します。

非アトミック変数へのアクセスを「適切に同期」すると、変更と別の (またはもちろん同じ) スレッドでのアクセスとの間に発生する前の関係があります。これには、任意の 2 つの変更間の関係が含まれます。

この先行発生関係はすべてのスレッドで有効であり、変更間の全体的な順序を誘導します。したがって、はい: 適切に同期化された使用により、完全な変更順序が得られます (同じ同期操作を使用して同期されたすべての変数についても同じです)。

于 2013-02-10T18:33:04.480 に答える