pop方法是否线程不安全

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

Max_Cooper

2019-08-07

图片描述
此处是否线程不安全?
举个例子,self.size()为1,2个的线程在高并发的情况下都到达了红线所在位置,然后依次获取锁,第一个线程获取到锁之后正常pop,第2个线程获取到锁之后,queue里没有元素,pop将会出错。此处是否线程不安全?

写回答

2回答

咚咚呛

2019-08-07

有经过深入的思考,点赞。
self.size函数已经有锁保护了,所以不会有两个线程到达红线的情况。

1
4
Max_Cooper
非常感谢!
2019-08-09
共4条回复

慕少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


0
0

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

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

7739 学习 · 1580 问题

查看课程