相关疑难解决方法(0)

在不锁定互斥锁的情况下调用pthread_cond_signal

我在某处读到我们应该在调用pthread_cond_signal之前锁定互斥锁并在调用它后解锁互斥锁:

pthread_cond_signal()例程用于发信号(或唤醒)正在等待条件变量的另一个线程.它应该在锁定互斥锁后调用,并且必须解锁互斥锁才能完成pthread_cond_wait()例程.

我的问题是:在不锁定互斥锁的情况下调用pthread_cond_signalpthread_cond_broadcast方法是不是可以?

c++ mutex signals pthreads condition-variable

78
推荐指数
3
解决办法
4万
查看次数

信号和解锁订单

void WorkHandler::addWork(Work* w){
    printf("WorkHandler::insertWork Thread, insertWork locking \n");
    lock();
    printf("WorkHandler::insertWork Locked, and inserting into queue \n");
    m_workQueue.push(w);
    signal();
    unLock();
}
Run Code Online (Sandbox Code Playgroud)

我按照教程,得到了这个.我想知道是否可以像这样更改singal()和unLock()的顺序

void WorkHandler::addWork(Work* w){
    printf("WorkHandler::insertWork Thread, insertWork locking \n");
    lock();
    printf("WorkHandler::insertWork Locked, and inserting into queue \n");
    m_workQueue.push(w);
    unLock();
    signal();
}
Run Code Online (Sandbox Code Playgroud)

如果我不能这样做,你能否详细说明为什么我不允许这样做?提前致谢.

c++ pthreads

15
推荐指数
1
解决办法
7802
查看次数

标签 统计

c++ ×2

pthreads ×2

condition-variable ×1

mutex ×1

signals ×1