写出儿女线程和妈妈线程的代码 实现线程同步
时间: 2023-11-28 07:32:46 浏览: 32
以下是一个简单的例子,展示如何实现儿女线程和妈妈线程之间的同步:
```
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void child_thread()
{
std::unique_lock<std::mutex> lock(mtx);
while(!ready)
{
cv.wait(lock);
}
std::cout << "Child: I love you, Mom!" << std::endl;
}
void mom_thread()
{
std::this_thread::sleep_for(std::chrono::seconds(3));
std::cout << "Mom: Good morning, my dear child!" << std::endl;
{
std::lock_guard<std::mutex> lock(mtx);
ready = true;
}
cv.notify_one();
}
int main()
{
std::thread child(child_thread);
std::thread mom(mom_thread);
child.join();
mom.join();
return 0;
}
```
在这个例子中,我们使用了一个互斥锁和一个条件变量来实现线程之间的同步。儿女线程等待条件变量被激活,而妈妈线程在等待3秒后激活条件变量,并通知儿女线程恢复执行。在这个过程中,互斥锁用于确保共享变量 `ready` 能够被正确地访问和修改。