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