아직 공부하는 중이므로 다름이 아니라 틀릴 수 있음.
다음 코드는 어떤 일을 scv에 해당하는 고루틴들에게 나눠서 일을 시킨다.
waitgroup을 이용하여 scv의 최대 마릿수를 지정한다.
분할 정복이 아니라면 각 go 루틴은 뮤텍스등을 이용하여 동시성 구현을 해야 한다.
package main
import (
"sync"
)
var gogo = make(chan int)
var stop = make(chan int)
func scv(my int) {
println("시작", my)
for {
select {
case k := <- gogo:
println("내가 할께", my, k)
case <- stop:
return
}
}
}
func main() {
wg := sync.WaitGroup{}
wg.Add(10)
for i := 0; i < 10; i++ {
go scv(i)
}
for i := 0; i < 10; i++ {
gogo <- i
}
for i := 0; i < 10; i++ {
stop <- 1
wg.Done()
}
wg.Wait()
}