-
35 votesanswersviews
何时需要一个条件变量,是不是一个互斥量足够?
我确定互斥是不够的,这就是条件变量概念存在的原因;但它打败了我,当一个条件变量必不可少时,我无法用一个具体的场景来说服自己 . Differences between Conditional variables, Mutexes and Locks问题的接受答案说条件变量是a 使用“信号”机制锁定 . 当线程需要等待资源变得可用时使用它 . 线程可以在CV上“等待”,然后资源生成器可以“发出信号... -
75 votesanswersviews
在不锁定互斥锁的情况下调用pthread_cond_signal
我在某个地方读到我们应该在调用 pthread_cond_signal 之前锁定 mutex 并在调用后解锁静音: pthread_cond_signal()例程用于发信号(或唤醒)正在等待条件变量的另一个线程 . 它应该在锁定互斥锁后调用,并且必须解锁互斥锁才能完成pthread_cond_wait()例程 . 我的问题是:是不是可以在不锁定互斥锁的情况下调用 pthread_cond_si... -
162 votesanswersviews
为什么pthreads的条件变量函数需要互斥锁?
我在读 pthread.h ;条件变量相关函数(如 pthread_cond_wait(3) )需要互斥锁作为参数 . 为什么?据我所知,我将创建一个互斥体只是用作该参数?那个互斥锁应该做什么? -
21 votesanswersviews
为什么Python threading.Condition()notify()需要锁定?
由于不必要的性能影响,我的问题特别提到为什么它是这样设计的 . 当线程T1有这个代码时: cv.acquire() cv.wait() cv.release() 和线程T2有这个代码: cv.acquire() cv.notify() # requires that lock be held cv.release() 发生的事情是T1等待并释放锁定,然后T2获取它,通知 cv 唤醒T1 . ... -
0 votesanswersviews
条件变量中的wait_for函数的用途 - C 11
我是条件变量,多线程和互斥的新手,我有一个基本的问题 . 在wait_for上从en.cppreference.com引用 - “阻止当前线程,直到条件变量被唤醒或在指定的超时持续时间之后” . 为什么在指定的持续时间后当前线程被解除阻塞 . 条件变量的基本目的是在发生“条件”时通知 . 如果线程被唤醒,例如每500毫秒,它不会导致开销吗?如果通知调用未发生/失败等,也会将虚假唤醒内置为安全机制 ... -
0 votesanswersviews
std :: condition_variable - 等待多个线程通知观察者
我的问题看起来像这样: 我有一个观察者,它持有一个std :: condition_variable和一个std :: mutex,我的工作线程对象有一个指向观察者的指针 . 每次工作线程完成其工作时,它调用m_Observer-> NotifyOne(),然后调用condition_variable的notify_one()函数 . 现在我想要做的是,启动一堆工作线程,每个线程具有不同的工... -
4 votesanswersviews
std :: condition_variable ::等待谓词
在std :: condition_variable的文档中,有一个wait()重载作为参数作为谓词函数 . 该函数将一直等到谓词函数为真的第一个wake_up . 在documentation 据说这相当于: while (!pred()) { wait(lock); } 但是也: 此异常可用于在等待特定条件变为真时忽略虚假唤醒 . 注意,在进入此方法之前必须获取锁定,在等待(锁定)...