gpt4 book ai didi

c++ - 保证在 pthread_wait_signal 之前执行 pthread_cond_wait

转载 作者:搜寻专家 更新时间:2023-10-31 01:08:54 25 4
gpt4 key购买 nike

不确定之前是否有人问过这个问题,但是如何(或是否)保证 pthread_cond_waitpthread_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com