admin管理员组文章数量:1599719
condition_variable使用基本形式如下:
lock
while(condition) {
wait(lock)
}
https://blog.csdn/matrixyy/article/details/50929150
lock后,wait实际上会unlock,然后其他线程才可能通过
lock
change condition
notify
修改condition并通知
但是修改condition可能condition不变,也可能又有一个线程将condition又改回,那么condition还是不满足,所以还是需要判断,所以使用while.
使用while也不是绝对的,例如下面的情况:
线程A,从vector取数据
while(!exit) {
lock
while(vector.isEmpty) { // 这里while改为if
wait(lock)
}
deal data or not // 判断是否真的需要处理数据
}
线程B,往vector填数据,可能提前结束
while(!exit) {
lock
vector.push
notify
}
notify_exit
若B线程提前结束了,即使最后发了notify,A线程也会死等,因为vector始终为空。
但是while改成if,就可以避免死等的问题。
本文标签: 要用条件conditionwaitcondition
版权声明:本文标题:为什么condition_wait要用while来判断condition条件? 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1728324416a1154247.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论