我想知道条件变量是否可能“错过”通知调用。我的情况如下。
给定一个互斥锁mu和一个谓词P(!queue.empty())...
线程A:在程序的整个生命周期内持续存在。等待于mu和P上的条件变量。在获取mu并验证队列不为空后,它将从队列中弹出一个项目。
线程B:一个函数,将获取mu,将其推入队列。
线程C:与B相同。
线程B和C同时产生。
在这种情况下,B首先获取mu,将其推入队列,放弃mu并调用notify。在B调用notify并放弃mu之间,C获取mu,将其推入队列并调用notify。最后,A获取mu,继续从队列中弹出一个项目并处理它。但是A只对其中一个notify调用起作用。
如果您想逐个处理队列中的项目,则似乎会创建堆积。
这是可能发生的情况吗?我们需要意识到这一点吗?例如,在A中,弹出直到队列为空?还是语言处理了这个问题?
给定一个互斥锁mu和一个谓词P(!queue.empty())...
线程A:在程序的整个生命周期内持续存在。等待于mu和P上的条件变量。在获取mu并验证队列不为空后,它将从队列中弹出一个项目。
线程B:一个函数,将获取mu,将其推入队列。
线程C:与B相同。
线程B和C同时产生。
在这种情况下,B首先获取mu,将其推入队列,放弃mu并调用notify。在B调用notify并放弃mu之间,C获取mu,将其推入队列并调用notify。最后,A获取mu,继续从队列中弹出一个项目并处理它。但是A只对其中一个notify调用起作用。
如果您想逐个处理队列中的项目,则似乎会创建堆积。
这是可能发生的情况吗?我们需要意识到这一点吗?例如,在A中,弹出直到队列为空?还是语言处理了这个问题?
notify
调用起作用有什么问题?你认为A接下来会做什么? - undefined