Python-列表是线程安全的吗?

发布于 2021-02-02 23:13:44

我注意到,通常建议使用具有多个线程的队列,而不是列表和.pop()。这是因为列表不是线程安全的,还是出于其他原因?

关注者
0
被浏览
96
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    列表本身是线程安全的。在CPython中,GIL防止对它们的并发访问,而其他实现则请小心地为它们的列表实现使用细粒度锁或同步数据类型。但是,虽然列表本身不会因尝试并发访问而损坏,但列表的数据不受保护。例如:

    L[0] += 1
    
    

    如果另一个线程做同样的事情,则不能保证实际上将L [0]增加1,因为+=这不是原子操作。(实际上,Python中很少有原子操作的操作,因为它们中的大多数操作都会导致调用任意Python代码。)你应该使用Queues,因为如果你仅使用不受保护的列表,则可能由于种族而获得或删除了错误的项目条件。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看