使用多线程处理for循环并创建线程锁保护变量C++
时间: 2023-12-10 10:39:37 浏览: 31
在C++中,可以使用多线程处理for循环的方式,其中需要使用线程锁来保护共享变量。下面是一个简单的示例代码,演示如何使用多线程处理for循环并创建线程锁保护变量:
```c++
#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
// 定义一个互斥锁
mutex mtx;
void threadFunction(int id, int& sum)
{
for (int i = 0; i < 1000000; i++)
{
// 加锁保护共享变量 sum
mtx.lock();
sum++;
mtx.unlock();
}
}
int main()
{
int sum = 0;
const int numThreads = 10;
thread threads[numThreads];
// 创建多个线程并启动
for (int i = 0; i < numThreads; i++)
{
threads[i] = thread(threadFunction, i, ref(sum));
}
// 等待所有线程结束
for (int i = 0; i < numThreads; i++)
{
threads[i].join();
}
cout << "Sum = " << sum << endl;
return 0;
}
```
在这个示例代码中,我们定义了一个互斥锁 `mtx`,并将其用于保护共享变量 `sum`。在函数 `threadFunction` 中,我们使用 for 循环对变量 `sum` 进行累加操作,并在操作前加锁、操作后解锁。在主函数中,我们创建了多个线程,每个线程执行函数 `threadFunction`,并将变量 `sum` 作为参数传递给线程。最后,我们等待所有线程结束后输出变量 `sum` 的值。
需要注意的是,在使用互斥锁时,应该尽可能地减少加锁的时间,以避免线程间的阻塞。在上面的示例代码中,我们将累加操作放在了加锁和解锁之间,这样可以尽可能地减少加锁时间。