我发现了一些使用 boost 线程、互斥锁和条件变量的代码,但我想尝试用 posix 线程重写这段代码。
这是 Boost 代码,我在这里找到:
void push(Data const& data)
{
boost::mutex::scoped_lock lock(the_mutex);
the_queue.push(data);
lock.unlock();
the_condition_variable.notify_one();
}
在我使用 pthreads 的代码中,我不确定是否以正确的方式使用条件变量,因为我不确定 notify_one() 和标记变量是否相同:
void push(T const& data)
{
pthread_mutex_lock(&m_mutex);
m_queue.push(data);
pthread_mutex_unlock(&m_mutex);
pthread_cond_signal(&m_condition);
}
初始化是在这样之前完成的:
pthread_mutex_t m_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t m_condition = PTHREAD_COND_INITIALIZER;
在另一个地方,他们正在使用the_condition_variable.wait(lock);
......这一行我会用这样的 pthreads 重写:pthread_cond_wait( &m_condition, &m_mutex);
我在正确的轨道上吗?