2011-12-05 22 views
-2

私のような2つの実行スレッド、ゴースレッド - 一時停止の実行

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

それが数秒間ルーチン1からルーチン2の実行を一時停止することは可能ですし、どのようにそれが可能にすることができますがありますか?

+2

それほど前のものではなく、ほとんど(複数の)複製であるという質問を下降させた。 – zzzz

+0

[同時実行ルーチンの相互排除]の可能な複製(http://stackoverflow.com/questions/8315970/mutual-exclusion-of-concurrent-go-routines) – peterSO

+0

これは私の質問とは違います。私のものはまったく違う。 – alessandro

答えて

1

1つのスレッドから、別のスレッドを暗黙的に制御することはできません。あなたはこれを行うことができ、ブールを定義し、それに基づいてあなたはtime.Sleep(2 * 1e9)で休止することができます。

6

別のゴルーチンの実行を制御することはできません。ゴルーチンは協力的です。彼らはお互いを支配しません。

あなたができることは、ルーチン2にポイントを置くことです。そこでは、進めることが許可されているかどうかがチェックされます。このような

// do stuff 
select { 
case <-wait: 
    <-resume 
default: 
} 

としてその後1は、ルーチン1を言うことができるルーチンを待つために、それを伝えるルーチン2に信号を送ることができます:

wait <- true 
// whatever stuff goes here 
resume <- true 

あなたはゴルーチンを一時停止するのはなぜ?それはあなたの質問にもっと役立つかもしれません。どのようにしたいのかではなく、何をしようとしているのかから始めるのが最善です。そうすれば、あなたは元々想像していた方法を達成する方法に貧弱な代替物を与えられるのではなく、あなたが実際にその言語で望むものを達成する方法を見つけることができます。