在python中list.pop线程安全吗
假设我有一个用随机值初始化列表的程序。然后,应用程序生成一组线程,每个线程不断从该共享列表中弹出项目。我的问题是,此操作是否线程安全:在python中list.pop线程安全吗,python,multithreading,Python,Multithreading,假设我有一个用随机值初始化列表的程序。然后,应用程序生成一组线程,每个线程不断从该共享列表中弹出项目。我的问题是,此操作是否线程安全: try: while global_list.pop(): ...do something .. except: print ("list is empty") 是否会出现由于线程之间的竞争条件而导致数据丢失的情况 编辑:我提到了链接,但是在引用的问题中有对列表数据的操作,我只是说从列表中弹出项目,这是在修改列表,而不是其中的数
try:
while global_list.pop():
...do something ..
except:
print ("list is empty")
是否会出现由于线程之间的竞争条件而导致数据丢失的情况
编辑:我提到了链接,但是在引用的问题中有对列表数据的操作,我只是说从列表中弹出项目,这是在修改列表,而不是其中的数据。在我的代码片段中,do some并不表示对列表数据的操作,它只是一些与列表数据无关的处理 我的答案是是-要将元素从全局列表中取出(pop),该列表一次由多个线程使用,是线程安全的 原因是它是原子操作 一次一个操作是原子操作 看看这个 来自上面的链接 在共享内存上执行的操作如果在一段时间内完成,则是原子操作 相对于其他线程的单个步骤。当一个原子库 在共享变量上执行时,其他线程无法观察 修改完成了一半。当原子加载在一个计算机上执行时 共享变量时,它读取在单个 瞬间。非原子负载和存储不会产生这些问题 保证 列表上的任何操作都不会是原子操作,因此需要特别注意使用锁、事件、条件或信号量等使其线程安全。
此处对此进行了解释。问题编辑,引用的链接没有回答我的问题。
集合
模块中有一个线程安全队列/队列,支持弹出和后进先出模式。我再次意识到,我的问题与列表的行为有关,没有找到替代方案。你链接了一堆与原子有关的东西,讨论原子的含义,但没有提供(至少在CPython中)列表pop实际上是原子的理由或证据。不过,你的问题有这个细节。