用GO写个多线程卖票程序
时间: 2023-04-06 18:04:59 浏览: 75
好的,我可以回答这个问题。以下是一个简单的用GO语言编写的多线程卖票程序:
```go
package main
import (
"fmt"
"sync"
)
var tickets = 100 // 总票数
var mutex sync.Mutex // 互斥锁
func sellTickets(i int, wg *sync.WaitGroup) {
defer wg.Done()
for {
mutex.Lock() // 加锁
if tickets > 0 {
fmt.Printf("售票员%d卖出了第%d张票\n", i, tickets)
tickets--
} else {
mutex.Unlock() // 解锁
break
}
mutex.Unlock() // 解锁
}
}
func main() {
var wg sync.WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1)
go sellTickets(i, &wg)
}
wg.Wait()
}
```
这个程序创建了5个卖票员的goroutine,每个卖票员都会不断地尝试卖出一张票,直到票卖完为止。为了避免多个卖票员同时卖同一张票,我们使用了互斥锁来保证同一时刻只有一个卖票员能够卖票。