当前位置: 首页 > 面试题库 >

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

韦鸣
2023-03-14
问题内容

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


问题答案:

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

L[0] += 1

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



 类似资料:
  • 问题内容: 有人说python字典是线程安全的。这是否意味着我可以或不能在字典中修改项目? 问题答案: 这两个概念完全不同。 线程安全性意味着两个线程无法同时修改同一对象,从而使系统处于不一致状态。 也就是说,在迭代字典时不能修改字典。请参阅文档。。 字典p在迭代过程中不应被突变。在字典上进行迭代时,修改键的值是安全的(自Python 2.1起),但前提是只要键的集合不变即可。

  • 问题内容: 我想知道Python内置容器(列表,向量,集合…)是否是线程安全的?还是我需要为共享变量实现锁定/解锁环境? 问题答案: 您需要为将在Python中修改的所有共享变量实现自己的锁定。你不必担心从不会被修改的变量读(即并发读取都OK了),所以稳定的类型(,,)都 可能是 安全的,但它不会伤害。对于你将要改变的东西- ,,,和大多数其他的对象,你应该有自己的锁定机制(而就地操作都OK在大多

  • 问题内容: 在中,此变量被声明为是我的问题,在某些调用之后检查值还是在多线程代码中使用perror()是安全的。这是线程安全变量吗?如果没有,那还有什么选择呢? 我在x86体系结构上将Linux与gcc一起使用。 问题答案: 是的,它是线程安全的。在Linux上,全局errno变量是特定于线程的。POSIX要求errno必须是线程安全的。 参见http://www.unix.org/whitepa

  • 问题内容: 我们在项目中使用了Drools kieSessions。许多线程可以创建新的kieSession。有时在创建会话时线程可能会挂起。因此,问题是: 首先 是kieContainer.newKieSession线程安全操作吗? 上吊的原因可能是肮脏的文字或阅读的kie会话集之类的东西吗? 问题答案: 当我在实践中检查 不是线程安全的操作。

  • 问题内容: 在Java中:线程安全吗,即返回的迭代器是在任何时候反映列表的当前状态,还是仅在创建列表时反映列表的状态? 问题答案: List.iterator()的行为未定义或与其他List实现保持一致。 对于ArrayList,LinkedList,如果在迭代列表时对其进行了修改,则可以获得ConcurrentModificationException。(这不能保证)避免此问题的方法是使用syn

  • 下面是在动作2中使用来自C++并发的锁的线程安全列表的示例源代码。 我理解这段代码的工作原理。但我不认为这个代码是完美的。我在这三个地方做了记号。 (1)析构函数中的remove_if确有必要?节点中的每个数据都使用智能指针。所以我不认为析构函数必须移除列表中的元素。你的意见呢? (2)即使使用remove_if,lambda函数的参数[](节点const&){...}看起来怪怪的。我认为lamb