eg:火车站有四个卖票窗口,一共有10000张票,现在设计一个方案实现自动售票,并且不发生超卖现象。
func main() {
nums := 10000 //预置票量
incs := make(chan int, nums)
for i:= nums ; i > 0; i-- {//利用channel保证原子性库存操作
incs <- i
}
for j:= 1; j <=4; j++ {//开启四个协程
go func () {
for {
i := <-incs
if i > 0 {
fmt.Printf("goroutine%d---买到了第%d张票\n",j,i)
time.Sleep(500*time.Millisecond)//看到打印效果
}else{
break
}
}
}()
}
}