我正在尝试实现并发队列,实现的框架如下:
struct queue
{
int try_pop()
{
pthread_mutex_lock(&mutex_);
int rt;
while( (rt = do_pop()) == -1)
{
pthread_cond_wait(&cond_,&mutex_);
}
pthread_mutex_unlock(&mutex_);
return rt;
}
bool push(int num)
{
pthread_mutex_lock(&mutex_);
push_impl(num);
#if 0
/*signal before unlock*/
pthread_cond_signal(&cond_);
pthread_mutex_unlock(&mutex_);
#else
/*signal after unlock*/
pthread_mutex_unlock(&mutex_);
pthread_cond_signal(&cond_);
#endif
return true;
}
// private function and data member
}
我可以在解锁
pthread_cond_signal
之前或之后调用mutex
。我的问题是两种方法的净效果之间有什么区别?
最佳答案
似乎您可以在执行_signal之前释放互斥量。在某些系统上,这甚至可以减少不必要的上下文切换。
参见http://www.domaigne.com/blog/computing/condvars-signal-with-mutex-locked-or-not/
关于c++ - pthread_mutex_unlock前后的pthread_cond_signal之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42340034/