[Go菜牛シリーズ]よくある同時モード
6262 ワード
本稿では、よく見られる同時モードの使い方を見てみましょう.ほとんどの言語では、スレッド同期の問題を解決するためにロックをかける方法が使用されます.Goも例外ではないが、Goは同期通信の問題を解決するための別の方法を提供している:共有する値をチャネルを介して伝送する.実際にはgoroutineとchannelの組み合わせによってこの特性を実現した.相互反発ロックにより同期通信 を実現する.はsyncを通過する.WaitGroupは、複数のスレッドの同期を実現する channelによる同期通信 を実現する.
package main
import (
"fmt"
"sync"
)
func main() {
var mux sync.Mutex
//
mux.Lock()
go func() {
fmt.Println("Hello my friend!")
//
mux.Unlock()
}()
// ,
mux.Lock()
}
package main
import (
"fmt"
"sync"
)
func main() {
// waitgroup
var wg sync.WaitGroup
// 10
for i:=0; i<10; i+=1 {
// , 1
wg.Add(1)
idx := i
go func(index int) {
fmt.Printf("[%d]Hello my friend!
", index)
//
wg.Done()
}(idx)
}
// Wait ,
wg.Wait()
}
package main
import (
"fmt"
)
func main() {
//
done := make(chan int)
go func() {
fmt.Println("Hello my friend!")
//
done 1
}()
//
done
}