c++多线程编程买票实例
时间: 2023-09-04 13:09:07 浏览: 137
你好!下面是一个简单的C++多线程编程的买票实例:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
int tickets = 100; // 假设有100张票
void sellTicket(int id) {
while (true) {
std::unique_lock<std::mutex> lock(mtx);
if (tickets > 0) {
std::cout << "售票员" << id << "卖出了第" << tickets << "张票" << std::endl;
tickets--;
} else {
break;
}
}
}
int main() {
const int numSellers = 5; // 假设有5个售票员
std::thread sellers[numSellers];
for (int i = 0; i < numSellers; i++) {
sellers[i] = std::thread(sellTicket, i+1);
}
for (int i = 0; i < numSellers; i++) {
sellers[i].join();
}
return 0;
}
```
在这个例子中,我们使用了标准库的`std::thread`和`std::mutex`来实现多线程并发卖票。主函数创建了5个售票员线程,并且每个售票员线程都会不断地尝试卖出一张票,直到票卖完为止。
为了保证线程安全,我们使用了互斥锁`std::mutex`来保护共享变量`tickets`的访问。每个售票员在卖票之前会先对互斥锁进行加锁,以确保同一时间只有一个线程能够访问`tickets`变量。当一张票卖出后,售票员会释放互斥锁,让其他线程有机会卖票。
希望这个例子能帮助你理解C++多线程编程中的一些基本概念。如果你有任何问题,请随时问我!
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)