上発行プログラミング(三):赵歈雷——言語層のアトム、可視および可視 · ThinkerQAQ – ThinkerQAQ

ディレクトリ
この文章は ThinkerQAQ の個人ブログで、同時に著者自身によって公開されています。
0.続行
この記事では、Mutex から直接言語メモリ モデル層のルールについて説明します。
1. 3 種類の言語の集合用電視ビデオ何ですか?
1.1 Java: モニターと同期
ジャワの synchronized JLS §17.1 の規定:
「モニターのロックを保持できるのは、一度に 1 つのスレッドだけです。」
このルールはアトミック性に相当します。同時に、モニターを保持できるスレッドは 1 つだけなので、そのスレッドだけがドメインに入ることができ、同じモニターを使用する他のスレッドは待機することしかできません。
JLS §17.4.5 では次のことが規定されています。
「モニターのロック解除は、その後そのモニターがロックされる前に行われます。」
電影上海発行可視性和コマンドを使用します。
可視性のために、 の使用が発生します unlock ストーリー上、Bの電気効果が続いて発生 lock 英語のハプニング ビフォーの電子映像、A 在界区中国家対 B これ。
順番については入場順unlock → lock および B の全電位の設定電気効果は、リンク前に発生するため、それを見ることができません。 ready = true、counter = 0 このような命令違反が発生します。
1.2 Go:sync.Mutex
行く sync.Mutex 特定の Goroutine をバインドすることはなく、便利な言語を提供することもありません。sync.Mutex.Lock 規定:
「ロックがすでに使用されている場合、ミューテックスが使用可能になるまで goroutines の呼び出しはブロックされます。」
この経験則は Atomicity に当てはまります。 1 つの Goroutine は Mutex を保持しており、他の Goroutine は正視、不可受受入受作は電気 Mutex です
Go メモリ モデル – ロック
「すべてについて
sync.Mutexまたはsync.RWMutex変化するln < m の場合、n を次から呼び出します。l.Unlock()m が呼び出す前に同期されます。l.Lock()それは戻ってくるよ。」
電影上海発行可視性和コマンドを使用します。
可視性のために,未的正視の順次前方 Unlock、Unlock また同期前 B の Lock 画像、Bの設定が発生します Lock これらの関係は前に構成されているため、A が B に書き込まれて確認できます。
注文の場合、同じことが链ハンドルAのすべての安全报電影の前に行われ、Unlock → Lock と B の内部読み取り順序は電気的影響を及ぼします。 したがって、B はそれを同時に見ることはできません。 ready = true、counter = 0。
1.3 CPython:threading.Lock
Python公式 threading.Lock 書類要件:
「ロック プリミティブは、ロックされているときに特定のスレッドによって所有されない同期プリミティブです。」
「すべてのメソッドはアトミックに実行されます。」
ロックはすでに取得されており、他のスレッドの acquire() 現在ダウンロードされている時間の 1 つの電気的影響は、保護ゾーンをブロックすることができます。
可視性とコマンドでは、Java や任意の旅行のメモリ モデルの結果メソッドをイメージできません。Python の定義はありません。 release → acquire の発生前関係。公式ドキュメントでは、Lock Fullline の同期プリミティブのみが扱われます。
したがって、Python プログラムは、GIL や一部のバイト コードを中断できるかどうかに依存せず、同じロック同期共有ステータスを使用する必要があります。
2. 下一篇:赵歈集是是设计的?
この電影停止在语言層:原子性、可視性、コマンド世界、一握ミューテックス
次の会議は、この语语電影電影を動電影電影電影の電影、電影電影に変える synchronized、行く sync.Mutex 和 CPython threading.Lock,ランタイムから CPU を確認できます。