Go言語でマルチスレッドをどのように実装するか
Go言語では、マルチスレッドを実現するためにgoroutineを利用できます。goroutineは、オペレーティングシステムの1つのスレッド上で動作するGo言語の軽量スレッドです。
goroutineを作成するには、関数呼び出し前にgoというキーワードを追加するだけです。例:
func main() {
go func1() // 创建goroutine并执行函数func1()
go func2() // 创建goroutine并执行函数func2()
// 等待所有goroutine执行完毕
time.Sleep(time.Second)
}
func func1() {
// 第一个goroutine的逻辑代码
}
func func2() {
// 第二个goroutine的逻辑代码
}
上の例では、main関数で2つのgoroutineを作成し、それぞれfunc1()とfunc2()を実行しています。goroutineは並列に実行されるため、この2つの関数は同時に実行することができます。
全ゴルーチン完了を待機する場合は、timeパッケージのSleep関数を用います。上記例では1秒待機することで、主スレッドを2つのゴルーチン完了後に終了させています。
共有メモリ空間で動作するすべての goroutine が共有変数に直接アクセスすることに注意してください。共有変数への複数の goroutine が競合してアクセスして競合状態を引き起こさないようにするために、相互排他ロック (sync.Mutex) などの Go 言語が提供するメカニズムを使用して同期処理を行うことができます。