【发布时间】:2013-05-03 06:50:51
【问题描述】:
我发现了一些使用 boost 线程、互斥锁和条件变量的代码,但我想尝试用 posix 线程重写这段代码。
这是 Boost 代码,我找到了here:
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);
我走对了吗?
【问题讨论】:
-
一个是带有C++接口的C++类,另一个是带有C风格接口的C风格结构? Boost 实现很可能在幕后使用 pthread 接口进行实现。
-
嗯,所以我应该始终解锁互斥锁,因为没有实例(如在 boost 实现中)在离开推送功能或任何其他功能时会被破坏,对吧?
标签: c++ boost pthreads mutex boost-thread