Go言語で提供されているsync.Mutexは、再入可能(re-entrant)ではありません。それについては、『プログラミング言語Go』(p,306)には次のように書かれています。 Go のミューテックスが再入可能ではないことには正当な理由があります。ミューテックスの目的は、共有された変数のある種の不変式がプログラム実行中の重要な時点で維持されているのを保証することです。不変式の一つは、「共有された変数へアクセスするゴルーチンが存在しない」*2ですが、ミューテックスが保護しているデータ構造に特有の追加の不変式が存在するかもしれません。一つのゴルーチンがミューテックスロックを獲得したときには、そのゴルーチンは不変式が維持されていると想定するでしょう。ロックを保持している間に共有された変数が更新され、一時的に不変式が破られるかもしれません。しかし、ロックを解放するときには、秩序が回復されて不
![ロック(ミューテックス)の再入可能性:柴田 芳樹 (Yoshiki Shibata):So-netブログ](https://cdn-ak-scissors.b.st-hatena.com/image/square/91294c5e7d5927632be882106d59f6c861902287/height=288;version=1;width=512/https%3A%2F%2Fblog.ss-blog.jp%2F_common%2Fimg%2Fsonet_logo_l.png)