はじめに この記事はGo Advent Calendar 2016 の17日目の記事です。 並行処理をする時にはロックが重要になります。 GoではchannelとMutexという仕組みを提供しています。 この記事では色々なロックを作りたいと思います。 tl;dr channelでロックを作ることは有意義です。 ただ、Mutexのほうが良いこともあります。 良い方法を選びましょう ロック無し ロックの意味を確かめるためにも、まずはロック無しのコードから始めます。 func main() { counter := 0 for i := 0; i < 1000; i++ { go func() { counter++ fmt.Print("*") }() } time.Sleep(3 * time.Second) fmt.Printf("\n%d\n", counter) } この関数を実行する