C++ 多线程数据保护
时间: 2023-12-29 08:24:44 浏览: 49
C++11提供了多种互斥类型来保护共享数据,包括非递归互斥锁(std::mutex)、递归互斥锁(std::recursive_mutex)、允许锁超时的非递归互斥锁(std::timed_mutex)和允许锁超时的递归互斥锁(std::recursive_timed_mutex)。使用互斥锁可以保证同一时间只有一个线程可以访问共享数据,从而避免了数据竞争和同步问题。
下面是一个使用std::mutex保护共享数据的例子:
```c++
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx; // 定义互斥锁
void print(int num)
{
mtx.lock(); // 加锁
std::cout << "Thread " << num << " is running." << std::endl;
mtx.unlock(); // 解锁
}
int main()
{
std::thread t1(print, 1);
std::thread t2(print, 2);
t1.join();
t2.join();
return 0;
}
```
在上面的例子中,我们定义了一个互斥锁mtx,并在print函数中使用了mtx.lock()和mtx.unlock()来保护共享数据。在main函数中,我们创建了两个线程t1和t2,并分别传入不同的参数调用print函数。由于print函数中使用了互斥锁,因此同一时间只有一个线程可以访问共享数据,从而避免了数据竞争和同步问题。