使用多线程处理for循环并创建线程锁C++
时间: 2023-12-10 14:39:51 浏览: 134
在 C++ 中,可以使用 `std::thread` 类来创建线程,使用 `std::mutex` 类来创建线程锁。以下是一个简单的例子,演示如何使用多线程处理 for 循环并创建线程锁:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx; // 创建一个互斥锁
void thread_func(int i)
{
std::lock_guard<std::mutex> lock(mtx); // 创建一个锁保证线程安全
std::cout << "Thread " << i << " is running." << std::endl;
}
int main()
{
const int thread_num = 10;
std::thread threads[thread_num];
for (int i = 0; i < thread_num; i++) {
threads[i] = std::thread(thread_func, i);
}
for (int i = 0; i < thread_num; i++) {
threads[i].join();
}
return 0;
}
```
在上面的代码中,我们首先创建了一个互斥锁 `mtx`,然后定义了一个线程函数 `thread_func`,该函数接受一个整数参数 i,在函数体内输出 "Thread i is running."。
我们在主程序中,使用 for 循环创建了 10 个线程,并将这些线程的执行任务设置为调用 `thread_func` 函数,并将 i 作为参数传递给函数。
最后,我们使用另一个 for 循环来等待所有线程完成任务,并使用 `join()` 函数将所有线程加入到主线程中。
在 `thread_func` 函数中,我们使用 `std::lock_guard<std::mutex>` 创建一个锁,来保证线程安全。当线程执行到该函数时,它会尝试获取 `mtx` 锁。如果锁已经被其他线程获取,则该线程会等待,直到锁被释放。一旦线程获取到该锁,它就可以继续执行函数体内的代码,并在函数执行完成后释放该锁。
这样,我们就可以使用多线程处理 for 循环,并通过线程锁来保证线程安全。
阅读全文