STL:条件变量

condition_variable m_wait;
mutex m_mutex;

while(true) {
	unique_lock<mutex> lock(m_mutex);
	m_wait.wait(lock, [&]{
    	return m_stop.load(std::memory_order_relaxed) || 	    								m_send_buf.empty() == false;
    });
    if(m_stop.load(std::memory_order_relaxed))
    	break;

    sendDatas = std::move(m_send_buf);
}

lock需要放在循环中。因为这样别的线程在while作用域出去后,才能去获得锁,改变数据。 进入循环时,会先获得锁,wait时,会检查条件变量,如果满足条件,就继续进行。如果不满足条件就会释放锁,等待被唤醒。如果满足条件了就会去等待获得锁并继续执行,如果不满足条件就继续睡眠,仍要等待被唤醒。

Table of Contents