OpenThreads::Mutex g_mutex;
OpenThreads::Condition g_condition;
bool ready = false;
//WorkThread是被阻塞,等待唤醒的线程
class WorkThread : public OpenThreads::Thread
{
public:
WorkThread() { }
void run()
{
OpenThreads::ScopedLock<OpenThreads::Mutex> mutex(g_mutex);
while (!ready)
{
//wait:获取Mutex,判断当前条件是否满足,不满足,进入阻塞状态,并释放Mutex
g_condition.wait(&g_mutex);
}
std::cout << "Work Thread Wake up and coming" << std::endl;
}
};
//NodifyThread是唤醒被阻塞线程的线程
class NotifyThread : public OpenThreads::Thread
{
public:
NotifyThread() {}
void run()
{
std::cout << "Start Notify Thread" << std::endl;
OpenThreads::ScopedLock<OpenThreads::Mutex> mutex(g_mutex);
ready = true;
std::cout << "Work Thread Go!" << std::endl;
//唤醒被阻塞的另一个线程
g_condition.signal();
}
};
//broadcast: 其他线程通过调用此函数唤醒所有被阻塞的线程
int main()
{
WorkThread w;
NotifyThread n;
w.start();
n.start();
w.join();//join():阻塞当前线程,直到w线程完成其执行
n.join();
getchar();
return 0;
}
OpenThreads::Condition
于 2024-07-27 16:40:37 首次发布