go并发编程-协程
协程间通信 2中方式 共享内存 和 消息传递
package main
import (
"fmt"
"runtime"
"sync"
)
var counter int = 0
func add(a,b int, lock *sync.Mutex) {
c : = a + b
lock.Lock() //Lock 加锁 Unlock 解锁
counter ++
fmt.Printf("%d:%d=%d+%d",counter,c,a,b)
lock.Unlock()
} // sync.Mutex go提供的互斥锁
通过channel进行消息传递
channel 是一种数据类型 本身是并发安全的 使用它在多个goroutine 直接传递消息 不必担心通道中的值被污染
使用通道 使用make 进行声明 chan 是关键字
一个通道只能传递一种类型的值
ch : = make(chan int) //初始化一个通道类型 ch 其中只能传递 int 类型的值
通道可以看做一个先进先出的队列 通过 <-
ch <- 1 //把元素1发送到通道 ch
接收
params := <- ch //params接收通道值
留空 表示 忽略 <-ch
package main
import (
"fmt"
"time"
)
func add(a,b int,ch chan int)