これは Go3 Advent Calendar 2017 の22日目の記事です.出張中の暇つぶしとして書いた software transactional memory パッケージ decillion/go-stm について解説します. 背景 Mutex(と RWMutex)は Go の基本的な同期プリミティブの1つですが,これを正しく使うのは容易ではありません.ちょっとした不注意が様々な問題(e.g. データ競合,デッドロック)を引き起こし,そのデバッグも簡単ではありません.粗粒度ロックを採用すれば,これらの問題が起こる可能性を下げることができますが,一方でパフォーマンスが低下する懸念があります. Software transactional memory (STM) は,上記で述べた問題とジレンマに対する解決策の1つです.STM とは,読んで字のごとく,『(DB がサポートするような)
![Software Transactional Memory for Go - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/cbc1f0f7d57c0fbd7dc87d81bc07542c36a83eff/height=288;version=1;width=512/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fqiita-fb-2887e7b4aad86fd8c25cea84846f2236.png)