初期化処理goroutineの生成チャンネル通信ロックOnce不正な同期クイック検索モジュール、クラス、または関数名を入力してくださいGo言語のメモリモデル¶イントロダクション¶Go言語のメモリモデルは、goroutineでの変数の更新結果が別のgoroutineでの同一変数の参照に認識される保証の条件を示します。単一のgoroutine内での参照および更新は、プログラムによって指定された順序通りに実行されるよう振る舞うでしょう。参照および更新の並べ替えが言語仕様で定義された挙動を変えない限りにおいては、コンパイラとプロセッサは単一のgoroutine内での並べ替えをおこなっても構いません。この並べ替えによって、goroutineが認識している実行順序が別のgoroutineが認識する順序と異なっていてもいいのです。更新結果を認識するかもしれません。1の後に発生すると言えます。2は同時に発生すると言えます。単一のgoroutine内では、このhappens-beforeの順序関係はプログラムで記述された通りとなります。以下の2つが成り立つ場合です。あることを確実にする必要があります。認識することが保証されるのは、以下の2つが成り立つ場合です。後に発生するこのペアの条件は最初のペアより優先されます。同時に発生する他の更新が無いことが必要です。単一のgoroutine内では並列処理は無いため、この2つの定義は同じ意味になります。アクセスする場合、必ず同期イベントを使用して、望ましい更新結果を参照が確実に認識するよう「happens-before」の条件を成立させます。その型に合わせたゼロ値に初期化する処理は、メモリモデルの中では更新として振舞います。プログラムの初期化処理は単一のgoroutineで実行され、初期化処理が完了するまでは初期化処理中に生成された新しいgoroutineの実行は開始されません。関数すべての開始の前に発生します。関数の完了後に発生します。関数の完了後に発生します。ステートメントは、goroutineの実行の開始前に発生します。チャンネル通信¶チャンネル通信はgoroutine間の同期のメインの手段です。特定チャンネル上のそれぞれの送信は、(通常は異なるgoroutineでの)該当チャンネルからの対応する受信とマッチします。チャンネル上の送信は、該当チャンネルからの対応する受信が完了する前に発生します。送信の前に発生します。バッファリング無しのチャンネルからの受信は、該当チャンネル上の送信完了前に発生します。受信の前に発生します。印字したりクラッシュすることはありませんが、空文字列を印字するでしょう)。2つのロックデータ型を実装しています。m回目の呼び出しのリターンの前に発生します。2回目の呼び出しのリターン前に発生します。呼び出しの前に発生します。パッケージは複数goroutine環境下での初期化処理の安全なメカニズムを提供します。リターンまでブロックされます。呼び出しのリターンの前に発生(リターン)します。