タグ付けされた質問 「happens-before」

2
Kotlinコルーチンは「前に起こる」保証をしますか?
Kotlinコルーチンは「前に起こる」保証を提供しますか? たとえばmutableVar、この場合、他のスレッドへの(潜在的に)書き込みとその後の読み取りの間に「前に起こる」保証があります。 suspend fun doSomething() { var mutableVar = 0 withContext(Dispatchers.IO) { mutableVar = 1 } System.out.println("value: $mutableVar") } 編集: たぶん、追加の例は、(変更可能性を除いて)Kotlinっぽいので、問題をより明確にするでしょう。このコードはスレッドセーフですか? suspend fun doSomething() { var data = withContext(Dispatchers.IO) { Data(1) } System.out.println("value: ${data.data}") } private data class Data(var data: Int)

1
「前に強く起こる」とはどういう意味ですか?
C ++ドラフト標準では、「前に強く起こる」というフレーズが何度か使用されています。 例:終了 [basic.start.term] / 5 std :: atexitへの呼び出し([support.start.term]を参照)の前に、静的ストレージ期間を持つオブジェクトの初期化が強く発生した場合、std :: atexitに渡された関数の呼び出しオブジェクトのデストラクタを呼び出す前にシーケンス化されます。std :: atexitの呼び出しが静的ストレージ期間のオブジェクトの初期化が完了する前に強く発生する場合、オブジェクトのデストラクタの呼び出しは、std :: atexitに渡される関数の呼び出しの前にシーケンスされます。std :: atexitへの呼び出しがstd :: atexitへの別の呼び出しの前に強く発生する場合、2番目のstd :: atexit呼び出しに渡される関数の呼び出しは、関数に渡される前にシーケンスされます最初のstd :: atexit呼び出し。 データレース [intro.races] / 12で定義 評価Aは、評価Dの前に強く発生します。 (12.1)AがDの前にシーケンスされる、または (12.2)AがDと同期し、AとDの両方が順次一貫したアトミック操作([atomics.order])である、または (12.3)評価BとCがあり、AはBの前にシーケンスされ、Bは単にCの前に発生し、CはDの前にシーケンスされる、または (12.4)AがBの前に強く発生し、BがDの前に強く発生するという評価Bがあります。 [注:非公式に、AがBの前に強く発生する場合、AはすべてのコンテキストでBの前に評価されるように見えます。excludeが操作を消費する前に強く発生します。—エンドノート] なぜ「以前に強く起こる」ことが導入されたのですか?直感的に、その違いと「以前の出来事」との関係は何ですか? ノートの「AはすべてのコンテキストでBより先に評価されるように見える」とはどういう意味ですか? (注:この質問の動機は、この回答の下でのPeter Cordesのコメントです。) 追加の標準草案(Peter Cordesに感謝) 順序と一貫性 [atomics.order] / 4 すべてのmemory_order :: seq_cst操作(フェンスを含む)には、次の制約を満たす単一の合計順序Sがあります。まず、AとBがmemory_order :: seq_cst操作で、AがBの前に強く発生する場合、AはSでBの前に発生します。 Bの前に、Sが満たすには、次の4つの条件が必要です。 (4.1)AとBが両方ともmemory_order …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.