這是一個(gè)buyTicket程序,當(dāng)ticket為0時(shí),會(huì)顯示“sell out”。我想知道為什么我不能在 buyTicket 函數(shù)中添加 sleep 以及為什么票會(huì)是負(fù)數(shù)? func(t *Ticket) buyTicket() { if t.getSpareTicket() <= 0 { log.Print("sell out") return } t.mu.Lock() t.numTicket-- time.Sleep(time.Microsecond) log.Printf("there are %d", t.numTicket) t.mu.Unlock() } func (t *Ticket) getSpareTicket() int{ t.mu.Lock() defer t.mu.Unlock() return t.numTicket } func main() { buyer := &Ticket{} buyer.mu = sync.Mutex{} buyer.numTicket = 100 for buyer.getSpareTicket() > 0 { //time.Sleep(time.Microsecond) go func() { log.Printf("number buy a ticket") buyer.buyTicket() }() } time.Sleep(time.Second * 2) //l := buyer.getSpareTicket() //fmt.Println(l) }當(dāng)我在函數(shù) buyTicket 中添加 time.sleep(time.microsecond) 時(shí),ticket 將為負(fù)數(shù),我想知道為什么會(huì)這樣?這是結(jié)果:2020/11/15 15:36:00 there are 22020/11/15 15:36:00 there are 12020/11/15 15:36:00 there are 02020/11/15 15:36:00 there are -12020/11/15 15:36:00 there are -22020/11/15 15:36:00 there are -32020/11/15 15:36:00 there are -42020/11/15 15:36:00 there are -5
為什么 sleep 會(huì)禁用 go 中的互斥鎖?
拉風(fēng)的咖菲貓
2022-07-11 17:14:52