c++如何使用for循环新开多个线程做某事,使用lamuda表达式,并且保障3个线程可以同时执行,执行完毕后主线程再继续
时间: 2024-03-10 12:49:47 浏览: 56
在 C++ 中,可以使用 `std::thread` 类来创建新的线程,并且可以使用 `std::mutex` 来实现线程之间的同步。为了保证多个线程可以同时执行,我们可以使用 `std::mutex` 和 `std::unique_lock` 来实现线程的互斥访问。具体的使用方法如下:
```c++
#include <iostream>
#include <thread>
#include <mutex>
int main() {
// 创建一个互斥量来保证线程的同步
std::mutex mtx;
// 创建多个新的线程
const int n_threads = 6;
std::vector<std::thread> threads(n_threads);
for (int i = 0; i < n_threads; i++) {
threads[i] = std::thread([&mtx, i]() {
std::unique_lock<std::mutex> lock(mtx);
std::cout << "Hello from thread " << i << std::endl;
});
}
// 等待所有线程执行完毕
for (auto& t : threads) {
t.join();
}
return 0;
}
```
在上述代码中,我们创建了一个互斥量 `mtx` 来保证线程的同步。在每个线程中,我们使用 `std::unique_lock` 来获取互斥量的锁,确保每个线程在访问共享资源时都是互斥的。这样就可以保证多个线程可以同时执行,而不会相互干扰。
需要注意的是,在主线程中需要使用一个循环来依次等待所有线程执行完毕。在上述代码中,我们使用一个 `std::vector` 来存储所有线程,然后使用一个循环来依次调用每个线程的 `join()` 函数,确保所有线程都执行完毕后程序才会退出。
另外,如果需要在多个线程之间共享数据,需要使用互斥量等同步机制来保证线程安全。
阅读全文