43 lines
582 B
Go
43 lines
582 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
)
|
|
|
|
func main() {
|
|
N := 100
|
|
P := 3
|
|
q := make(chan int)
|
|
scatter(N, P, q)
|
|
gather(N, P, q)
|
|
}
|
|
|
|
func scatter(N, P int, q chan int) {
|
|
for i := 0; i < P; i++ {
|
|
go _scatter(i, N, P, q)
|
|
}
|
|
}
|
|
|
|
func _scatter(i, N, P int, q chan int) {
|
|
start := i * (N / P)
|
|
chunk := N / P
|
|
if i == P-1 {
|
|
chunk += N % P
|
|
}
|
|
ttl := 0
|
|
for j := start; j <= start+chunk; j++ {
|
|
ttl += j
|
|
}
|
|
log.Println(i, N, P, q, start, start+chunk, ttl)
|
|
q <- ttl
|
|
}
|
|
|
|
func gather(N, P int, q chan int) {
|
|
ttl := 0
|
|
for i := 0; i < P; i++ {
|
|
ttl += <-q
|
|
}
|
|
fmt.Println("go", ttl)
|
|
}
|