2011-12-05 13 views
2

I持つ二つのゴルーチンのような、ゴースレッド - STOP実行

Routine 1 { 
// do something 
} 
Routine 2 { 
// do something 
} 
main { 
// do something 
} 

それはいくつかの条件が満たされた場合、全体のプログラムの実行を停止し、ルーチン1でから可能ですか?メインとルーチン2の実行を停止しますか?簡単な例を挙げることができます。例えば

答えて

3

package main 

import "os" 

func routine1() { 
    // set exit = true when ready to exit 
    exit := false 
    if exit { 
     os.Exit(0) 
    } 
} 

func routine2() { 
} 

func main() { 
    go routine1() 
    go routine2() 
} 
1

またroutine2と通信routine1持つようにチャネルを使用することができます。 WLOGルーチン1は何かをチャンネルに送り、routine2はselectステートメントを使ってそのチャンネルから何かを取り除くか、別の「仕事」チャンネル(ルーチンに仕事を提供するチャンネル)から何かを取り除くことができます。ルーチン2が何かを「実行終了」チャンネルから取り除くと、終了してos.Exit(0)を呼び出すことができます。