我正在尝试实现并发队列,实现的框架如下:

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/

10-09 04:10