用C++写一个创建线程锁和退出线程锁并多线程调用共享资源的完整例子
时间: 2024-04-12 10:29:44 浏览: 123
当使用 C++ 编写多线程代码时,可以使用 `std::mutex` 类来实现线程锁,并使用 `std::thread` 类创建和管理线程。下面是一个完整的示例,演示了如何创建线程锁、退出线程锁,并在多个线程中调用共享资源:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
int shared_resource = 0;
void increment()
{
// 获取线程锁
mtx.lock();
// 执行对共享资源的操作
shared_resource++;
// 释放线程锁
mtx.unlock();
}
int main()
{
// 创建多个线程并启动
std::thread threads[5];
for (int i = 0; i < 5; i++) {
threads[i] = std::thread(increment);
}
// 等待所有线程执行完成
for (int i = 0; i < 5; i++) {
threads[i].join();
}
// 打印最终的共享资源值
std::cout << "共享资源的值: " << shared_resource << std::endl;
return 0;
}
```
在上面的代码中,我们首先包含了 `<iostream>`、`<thread>` 和 `<mutex>` 头文件。然后,我们创建了一个互斥量(线程锁)对象 `mtx` 和一个共享资源变量 `shared_resource`。
接下来,我们定义了一个函数 `increment()`,该函数在获取锁后对共享资源进行自增操作,并在完成后释放锁。
在主函数中,我们创建了五个线程,并通过调用 `std::thread()` 构造函数传递 `increment` 函数作为线程的入口点。然后,我们使用 `join()` 方法等待所有线程执行完成。
最后,我们打印出最终的共享资源值。
请注意,在使用互斥量时,我们使用了 `lock()` 和 `unlock()` 方法来获取和释放锁。确保在获取锁后及时释放锁,以避免死锁和其他线程阻塞的问题。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)