問題:
兩個協程交替打印1-100的奇偶數,一個協程打印奇數,一個協程打印偶數。
代碼1:
package main
import (
"fmt"
"runtime"
"time"
)
func main() {
//設置可同時使用的CPU核數爲1
runtime.GOMAXPROCS(1)
go func() {
for i := 1; i < 101; i++ {
//奇數
if i%2 == 1 {
fmt.Println("線程1打印:",i)
}
//讓出cpu
runtime.Gosched()
}
}()
go func() {
for i := 1; i < 101; i++ {
//偶數
if i%2 == 0 {
fmt.Println("線程2打印:",i)
}
//讓出cpu
runtime.Gosched()
}
}()
time.Sleep(3 * time.Second)
}
代碼2:使用channel
package main
import (
"fmt"
"time"
)
func main() {
c := make(chan int)
go func() {
for i := 1; i < 101; i++ {
c <- 1
//奇數
if i%2 == 1 {
fmt.Println("線程1打印:",i)
}
}
}()
go func() {
for i := 1; i < 101; i++ {
<- c
//偶數
if i%2 == 0 {
fmt.Println("線程2打印:",i)
}
}
}()
time.Sleep(3 * time.Second)
}