Go语言共享数据的安全性
Go语言保证协程间共享数据的安全性有两种方式,一种是给共享变量加锁,另一种是通过通道来共享数据。
下面通过简单的模拟火车票的售票窗口,来看一下这两种数据共享方式
第一种,通过通道共享
package main
import (
"fmt"
"sync"
"time"
)
var (
ticket = 1 //火车票票号
windNum = 1000 //窗口的数量
ticketTotal = 100000 //总票数
wg sync.WaitGroup
lk sync.Mutex
ch = make(chan int, ticketTotal)
)
func main() {
//先把10万张票写入通道
for i := 1; i <= ticketTotal; i++ {
ch <- i
}
//写入操作完毕,关闭通道
close(ch)
//等待1000个子协程执行完毕,再结束主函数。
wg.Add(windNum)
now := time.Now()
for i := 1; i <= windNum; i