8

JLSでは、§17.4.5。起こる-注文の前に、それはそれを言います

プログラムは、すべての逐次一貫性のある実行にデータ競合がない場合にのみ、正しく同期されます。

それは私たちに「逐次一貫性」についての定義を与えるだけであり、「逐次一貫性のある実行」についての定義を私たちに与えません。「逐次一貫性のある実行」とは何かを知って初めて、このトピックについてさらに議論することができます。

では、「逐次一貫性のある実行」とは何であり、「逐次一貫性のある実行にはデータの競合がない」とは何でしょうか。

4

4 に答える 4

4

実行には非常に単純な正式な定義があります。これは、検討中のすべてのメモリアクションのセットに対する単純な合計順序です。

逐次一貫性のある実行は、逐次一貫性のあるアクションの全順序で表されます。

「データの競合がない」という用語も、JLSによって正確に定義されています。

JLSは逐次一貫性を必要としないことに注意してください。実際、逐次一貫性のない実行が逐次一貫性の錯覚を維持できる用語を正確に定義するために、発生前の形式全体が存在します。

于 2012-08-18T12:18:42.143 に答える
1

2つのアクションにデータ競合がないことを確認するには、 §17.4.5で指定され、メモリ整合性プロパティに要約されている5つの条件のいずれかを使用して、2つのアクション間に発生前の関係を確立する必要があります。これを行うと、プログラムはこれら2つのアクションに関して正しく同期されます。そのプログラムのすべての実行は逐次一貫性があるように見え、§17.4.3で許可されている並べ替えは無視してかまいません。プログラムとプログラムの順序

于 2012-08-18T12:36:05.510 に答える
1

sequentially consistent executions基本的に、変数の各読み取り操作は、読み取り/書き込み操作が実行されるスレッドまたはプロセッサに関係なく、その変数の最後の書き込み操作を参照することを意味します。

ただし、JLSは、そのままの状態での逐次一貫性を保証するものではありません。プログラマーは、適切な同期によってこの一貫性を実現する必要があります。同期しないと、スレッドに不適切なデータが表示される可能性があります。たとえば、同時に別のスレッドによって変更されているデータなどです。これは「データレース」と呼ばれます。

于 2012-08-18T12:09:49.520 に答える
0

1)シーケンシャルコンシステント実行(定義による):実行の結果は、すべてのプロセッサの操作が特定の順序で実行された場合と同じであり、個々のプロセッサの操作は、で指定された順序でこの順序で表示されます。そのプログラム

2)データ競合は、同時操作が共有メモリの場所にアクセスする状況であり、そのうちの少なくとも1つは書き込みです。

3)したがって、実行が順次一貫して表示されない場合、それらの結果はプログラムの結果と異なるか、予期しない動作を示します。そして、私たちが望まないそのような処刑。

4)seqがあると仮定する場合。詐欺。データ競合がないわけではない実行の場合、このシーケンスの別のフォークが存在することを意味します。詐欺。データレースポイントでアクセスを並べ替え、異なるプログラム結果につながる実行。そして、これらの実行は、プログラムと順次一貫性がありません。

5)プログラムはseqを許可します。詐欺。直感に反する動作や予期しない結果が発生するため、実行が正しく同期されません。

于 2018-07-14T18:17:03.753 に答える