sync.Mutexの仕組みを理解する
syncパッケージとは相互排他ロックなどの基本的な同期プリミティブを提供するパッケージです。 その中の一つにsync.Mutexというものが存在します。 sync.Mutexはgoroutineの排他制御を行うための機能です。 sync.Mutexの使い方やごく簡単なサンプルコードは数多く存在しますが、sync.Mutexの内部的な実装を解説した記事は現時点では2桁もありません。 そこで、本セッションでは、排他制御の定義、sync packageの概要について説明した後に、sync.Mutexおよび、Lock、Unlockメソッドに着目し内部実装レベルでコードリーディングし、理解を深めていきます。 理解を深めていくにあたって、次世代UNIXとして開発されていた分散OSであるPlan 9の存在は欠かせません。 そこで、ベル研究所の元メンバーであり、Plan 9に携わったのち、現Goチームで開発を行うRuss Cox氏の書いたSemaphore in Plan 9の論文を参考にします。 上記の論文を引用しながら、sync.Mutexの仕組みを原理原則から整理して話します。 セッションの聴講者は、sync.Mutexの理解および、実装を読むにあたり必要なGoのランタイムパッケージ、スケジューラ、go:linkname ディレクティブといったGoのエコシステムの仕組みについても学ぶことができます。