从队列取出元素

来源:8-3 实现线程安全的队列Queue

Umud

2020-07-14

图片描述
在蓝色框里已经判断在queue里没有元素时返回 None,不明白为什么在黄色框里再次判断返回None?

写回答

1回答

咚咚呛

2020-07-14

因为在wait之后,队列中有可能已经被别的线程push了元素(被唤醒),也有可能被唤醒以后,又被别的阻塞在pop这里的线程取走了,所以要保证size不为空的情况下,才能进行queue.pop()操作。

对于这里的思考,应该结合多个线程的场景去判断,考虑其他线程会处于怎么样的一个状态,只线性思维去思考的话,很多情况下,并发的问题就会想不明白,建议可以多实战下,努力模拟并发的场景。

希望对你有所帮助。

0
1
Umud
非常感谢!
2020-07-15
共1条回复

(新版)计算机基础,计算机组成原理+操作系统+网络

编程之前先学这门课,系统补足计算机基础知识,夯实编程地基

7739 学习 · 1580 问题

查看课程