複数のゴルーチンの終了を調整する
Golang で複数のゴルーチンを操作する場合、多くの場合、一緒に終了するように実行を同期する必要があります。 。一般的なアプローチの 1 つは、チャネルを利用して完了を通知することです。ただし、この方法では、ゴルーチンが予期した順序で終了しない場合、「閉じたチャネルへの書き込み」パニックが発生する可能性があります。
ゴルーチン調整のためのコンテキストの使用
Aより良い解決策には、コンテキストを使用することが含まれます。コンテキストは、ゴルーチン間の通信とキャンセルのためのメカニズムを提供します。これを Go で実装する方法は次のとおりです。
package main import ( "context" "sync" ) func main() { // Create a context and a function to cancel it ctx, cancel := context.WithCancel(context.Background()) // Initialize a wait group to track goroutine completion wg := sync.WaitGroup{} wg.Add(3) // Add 3 goroutines to the wait group // Launch three goroutines // Each goroutine listens for the context to be done go func() { defer wg.Done() for { select { case <-ctx.Done(): // Context is canceled, end this goroutine } } }() go func() { defer wg.Done() for { select { case <-ctx.Done(): // Context is canceled, end this goroutine } } }() go func() { defer wg.Done() // Perform operations. // When operations are complete, call cancel to end all goroutines cancel() }() // Wait for all goroutines to finish wg.Wait() }
この例では、3 番目のゴルーチンが操作を完了すると、コンテキストがキャンセルされます。これによりキャンセルが他のゴルーチンに伝播され、それらのゴルーチンも終了します。コンテキストを使用することで、パニックの可能性を排除し、すべてのゴルーチンが効果的に終了を調整できるようにします。
以上がGo で複数のゴルーチンを正常に終了するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。