C++多线程同步参考代码
时间: 2023-08-03 07:08:09 浏览: 54
以下是一个使用互斥锁和条件变量实现多线程同步的示例代码:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void worker(int id)
{
std::unique_lock<std::mutex> lock(mtx);
while (!ready)
{
cv.wait(lock);
}
std::cout << "Worker " << id << " is working" << std::endl;
}
int main()
{
std::thread workers[5];
for (int i = 0; i < 5; ++i)
{
workers[i] = std::thread(worker, i + 1);
}
// 做一些准备工作...
{
std::lock_guard<std::mutex> lock(mtx);
ready = true;
cv.notify_all();
}
for (int i = 0; i < 5; ++i)
{
workers[i].join();
}
return 0;
}
```
在上述代码中,我们创建了5个线程,每个线程都会等待条件变量`ready`为`true`时才开始执行工作。在主线程中,我们在做完准备工作后,通过互斥锁将`ready`设置为`true`,并通过条件变量的`notify_all`通知所有等待的线程开始工作。
注意,在等待条件变量时,我们使用了`cv.wait(lock)`来阻塞线程,并释放互斥锁。这样做可以避免线程占用过多的系统资源,直到条件满足才继续执行。
以上只是一个简单的示例,实际使用时,可能还需要考虑更复杂的同步问题,并根据具体情况选择合适的同步机制。