我一直在读关于CPython的collections.deque
here和{a2}的线程安全性。我知道.append()
和.popleft()
操作在线程间相互配合很好,.appendleft()
和{
我的问题是:在.popleft()
和.clear()
之间是否同样适用?否则,在.popleft()
和.pop()
之间?我的情况是,我有一个消费者线程,称之为a,不断地.popleft()
来自a deque
d
的项目,而生产线程B在右侧.append()
为它们提供服务。在某些时候,我希望线程B能够说“取消所有挂起的项目”。如果我这么做
d.clear()
它是否会因为与线程A的.popleft()
操作冲突而导致未定义的行为?如果我说:
相反呢?在
从documentation of the api:
也就是说,你可以在任何一方都能享受到好处。至于
clear()
方法,只能通过查看实现来确定,但我假设它的实现方式与您建议的相同。在编辑: 另外,如果我从阻塞队列的java实现中正确地记得,对于所有预期的目的,它应该相当接近这个实现,那么对队列对象调用
clear()
并不能保证当您在下一个代码行访问它时,会发现它是空的如果我记得的话,它们不应该干扰您正在尝试的操作,因为它们将在资源上放置一个互斥锁,并独立地执行任何操作,只要您在尝试弹出时从资源中捕捉到一个异常(如果它是空的),您就可以开始了。在
相关问题 更多 >
编程相关推荐