職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

ゴルーチン---ウエイト

2023年04月05日 | GO言語
ウエイト


【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト

【ウェイト】
ゴルーチンの終了タイミングは正確に予想が出来ないため、ウェイトグループ(WaitGroup)を使ってゴルーチンが終了するまで待つようにする。
・サンプルコード
// gosample.go
package main

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

// sync.WaitGroupの値を保存する変数の宣言
var wg sync.WaitGroup

// 一度に文字列(厳密には文字)を1個出力すつことを10回繰り返す関数を定義する
func printjob(s string) {
defer wg.Done() //終了を待つゴルーチンの数がデクリメントされる
for i := 0; i < 10; i++ {
time.Sleep(10 * time.Millisecond)
fmt.Printf("%s", s)
}
}

// メイン
func main() {
wg.Add(3) //待つジョブを3にする

fmt.Println("A start")
go printjob("A") //ゴルーチン

fmt.Println("B start")
go printjob("B") //ゴルーチン

fmt.Println("C start")
go printjob("C") //ゴルーチン

wg.Wait() //すべてのジョブが終わるのを待つ

fmt.Printf("\n終了\n")

}
・実行
PS D:\GO言語\サンプルプログラム\Go-8> go run gosample.go
A start
B start
C start
CABACBBCAACBCABACBCBACABABCBAC←順不同
終了

【wg.Wait()を書かない場合】
PS D:\GO言語\サンプルプログラム\Go-8> go run gosample.go
A start
B start
C start
終了
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする