- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
不确定之前是否有人问过这个问题,但是如何(或是否)保证 pthread_cond_wait
在 pthread_cond_signal/broadcast
之前执行?
如果一个线程在调用后续的 pthread_cond_signal
之后调用 pthread_cond_wait
会发生什么情况?
信号会丢失吗?
如果 pthread_cond_signal
是一个阻塞调用(从“至少一个线程被唤醒”的描述来看,这听起来像是)在那个阻塞状态下互斥量会发生什么?谢谢您的帮助!
最佳答案
pthread_cond_wait
发生在pthread_cond_signal
之前还是之后并不重要,因为您只在谓词为假时调用pthread_cond_wait
,并且状态当与条件变量相关联的互斥锁被持有时,谓词所依赖的不能改变。
假设服务员正在做如下事情:
pthread_mutex_lock(mutex);
while (!predicate(state)) pthread_cond_wait(cond, mutex);
pthread_mutex_unlock(mutex);
为了有理由向条件变量发送信号,发送信号的线程必须对 state
进行一些更改。为了在不调用未定义行为的情况下执行此操作,它必须持有 mutex
,它保护 state
。然而,这意味着 state
的更改在上述代码片段之前完成(在这种情况下,pthread_cond_wait
永远不会被调用,因为 predicate( state)
现在为真),在调用 pthread_cond_wait
期间(当互斥体解锁时;在这种情况下,更改 state
后的信号将解除等待), 或者在上面的代码片段结束之后(在这种情况下它是无关紧要的)。
关于c++ - 保证在 pthread_wait_signal 之前执行 pthread_cond_wait,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17607010/
不确定之前是否有人问过这个问题,但是如何(或是否)保证 pthread_cond_wait 在 pthread_cond_signal/broadcast 之前执行? 如果一个线程在调用后续的 pth
我是一名优秀的程序员,十分优秀!