hoge1特有の処理Bは、hoge1特有の処理Aが終了かつ5秒以上経っていた場合に実行するにはどうすればいいのでしょうか?
ただhoge2も同様で、hoge1()とhoge2()のスタートは同時ではありません。
hoge1とhoge2はお互い全く影響はない独立した処理になります。
hoge1しかない場合はtimer := time.NewTicker(time.Second * 5)で待てばいいのでできたのですが、複数goroutineの場合はtimerが共有される?ようでうまく全ての関数が5秒待って次の処理を初めてくれているわけではないようでした。
複数goroutineの場合はwgを使うとググってあったので試してみたのですがうまくできません。
hoge1とhoge2にwg1、wg2のようにそれぞれ違うインスタンスを作成してみてもうまくできませんでした。
実際はhoge関数は二つ以上あります。
これはどのようにすれば良いのでしょうか?
package main import ( "sync" "time" ) func wgwg(wg *sync.WaitGroup){ wg.Add(1) time.Sleep(5 * time.Second) wg.Done() } func hoge1(){ var wg sync.WaitGroup wg.Add(1) go wgwg(&wg) //(hoge1特有の処理A) wg.Done() wg.Wait() //(hoge1特有の処理B) } func hoge2(){ var wg sync.WaitGroup wg.Add(1) go wgwg(&wg) //(hoge2特有の処理A) wg.Done() wg.Wait() //(hoge2特有の処理B) } func main() { go hoge1() time.Sleep(3 * time.Second) go hoge2() //(なにかしらの処理) time.Sleep(10 * time.Second) }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/24 04:24