Skip to content

Instantly share code, notes, and snippets.

@bohdantrotsenko
Created July 7, 2016 06:40
Show Gist options
  • Save bohdantrotsenko/b4fbb0178a76287687acee32d8f96170 to your computer and use it in GitHub Desktop.
Save bohdantrotsenko/b4fbb0178a76287687acee32d8f96170 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"flag"
"sync"
"sync/atomic"
"time"
)
var Narg *int = flag.Int("n", 10000, "кількість го-підпрограм")
var counter *int32 = new(int32) // простий лічильник
var before sync.WaitGroup // для повідомлення про умовний "початок"
var after sync.WaitGroup // для повідомлення про завершення
func worker() {
before.Wait() // чекаємо на сигнал про початок, щоб "почати з усіма"
atomic.AddInt32(counter, 1) // от і вся робота
after.Done() // сигналізуємо завершення
}
func main() {
*counter = 0
flag.Parse() // розбираємо параметри
N := *Narg
start := time.Now() // фіксуємо час початку
before.Add(1)
after.Add(N)
fmt.Printf("%f Запускаю %d го-підпрограм...\n", time.Since(start).Seconds(), N)
for i := 0; i < N; i++ {
go worker()
}
before.Done() // після цього моменту го-підпрограми пройдуть рядочок before.Wait()
fmt.Printf("%f Чекаю на завершення го-підпрограм...\n", time.Since(start).Seconds())
after.Wait() // чекаємо, поки по-підпрограм виконають after.Done()
fmt.Printf("%f Кінець.\n", time.Since(start).Seconds())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment