1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Golangでゴルーチンを触ってみる 第二弾

Posted at

###第一弾###
第一弾
こちらはgoroutineをちょっとだけ触った記事

##登場人物##

  • func goroutine1()  前の記事に仲間外れにされた人物
  • func goroutine2()  なぜか悪者にされた人物
  • func main()     こいつが本当の悪者
  • var wg := ??     今回の主役
goroutine.go
package main

import (
	"time"
	"fmt"
	"sync"
)

func goroutine1(wg *sync.WaitGroup){
	for i:=0;i<5;i++ {
		time.Sleep(100*time.Millisecond);
		fmt.Println("goroutine");
	}
	wg.Done()
}

func goroutine2(){
	for i:=0;i<5;i++ {
		time.Sleep(time.Millisecond);
		fmt.Println("now");
	}
}

func main(){
	var wg sync.WaitGroup
	wg.Add(1)
	go goroutine1(&wg);
	goroutine2();
	wg.Wait()
}

今日の主役 sync.WaitGroup さんです
彼が2つのfuncの間を取り持ってくれます。
ここだけの話syncって同期って意味らしいですよ・・・

###解説?###

  • wgをWaitGroupというstructで宣言します。
  • wg.Add()にブロックするgoroutineの数を指定します。
  • それをgoroutine1に投げ飛ばします。
  • すると・・・**wg.Wait()が早くwg.Done()**かえってこねぇかなーと
    mainでずっと待っててくれます。
  • func goroutine1のループが終わると
  • **wg.Done()**が返ってくるので終了ということになります。

###次回予告###
未定  たぶんchannel

最初にdefer wg.Done()でもいいのかなって思った

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?