package main
import (
"fmt"
"sync"
)
func main() {
var jobs sync.WaitGroup
for i:=0;i<4 ;i++ {
jobs.Add(1)
go work(i,&jobs)
}
jobs.Wait()
println("all jobs finished")
}
func work(i int,jobs *sync.WaitGroup) {
defer jobs.Done()
fmt.Println("i work for %d\n",i)
}
channel
package main
import (
"fmt"
)
func main() {
count:=4
var results =make(chan bool,count)
for i:=0;i<count ;i++ {
go work(i,results)
}
for i:=0;i<count ;i++ {
<-results
}
println("all jobs finished")
}
func work(i int,results chan bool) {
defer func() {results<-true}()
fmt.Printf("i work for %d\n",i)
}
select
package main
import (
"fmt"
)
func main() {
c1,c2:=make(chan int),make(chan int)
go work(c1)
go work(c2)
for i:=0;i<4 ;i++ {
select {
case v1:=<-c1:
fmt.Printf("from c1:%d\n",v1)
case v2:=<-c2:
fmt.Printf("from c2:%d\n",v2)
}
}
}
func work(c chan int) {
for i:=0;i<2 ;i++ {
c<-i
}
}