pop方法是否线程不安全
来源:8-3 实现线程安全的队列Queue

Max_Cooper
2019-08-07
此处是否线程不安全?
举个例子,self.size()为1,2个的线程在高并发的情况下都到达了红线所在位置,然后依次获取锁,第一个线程获取到锁之后正常pop,第2个线程获取到锁之后,queue里没有元素,pop将会出错。此处是否线程不安全?
写回答
2回答
-
有经过深入的思考,点赞。
self.size函数已经有锁保护了,所以不会有两个线程到达红线的情况。142019-08-09 -
慕少3205599
2019-08-28
# 或许可以这样处理:
def pop(self, block=False, timeout=0): if self.size() == 0: if block: with self.condition: self.condition.wait(timeout=timeout) else: return with self.lock: try: rest = self.queue.pop(0) except IndexError: return return rest
00
相似问题