信号量的作用:一个线程等在哪里,其他的线程发出通知让等待的线程继续运行。
线程A
std::mutex m;
std::condition_variable c;
void A_proc()
{
std::unique_lock<std::mutex> lk(m); //进入临界区
c.wait(m); //A线程等待直到通知到来
}
void B_proc()
{
std::unique_lock<std::mutex> lk(m); //进入临界区
c.notify_one(); //通知线程A继续
}
这里需要注意在线程A进入临界区后B是不能同时进入的,当A调用wait后将放弃临界区控制,这导致B可以进入并进行通知notify_one。