2024-10-17 08:25:57 发布
网友
我知道python中的内置集类型通常不是线程安全的,但是thisanswer声称从两个竞争线程调用pop()是安全的。当然,您可能会得到一个异常,但您的数据没有损坏。我似乎找不到一个证明这一说法的文件。是真的吗?请出示文件!在
我相信设置“pop”操作是线程安全的,因为它是原子的,从某种意义上说,两个线程不能弹出相同的值。在
例如,如果另一个线程正在迭代该集合,我就不会依赖它的行为。在
我也找不到任何具体的文档,只有一些指向这个方向的主题。Python的官方文档确实会受益于这类信息。在
如果你看一下^{} method in the CPython source,你会发现它没有释放GIL。在
这意味着在CPython进程中一次只能发生一个set.pop。在
set.pop
因为^{} checks if the set is empty,你只能通过尝试从一个空的集合中弹出来引起IndexError。在
IndexError
所以不,不能通过使用CPython从多个线程中弹出一个集合来破坏数据。在
我相信设置“pop”操作是线程安全的,因为它是原子的,从某种意义上说,两个线程不能弹出相同的值。在
例如,如果另一个线程正在迭代该集合,我就不会依赖它的行为。在
我也找不到任何具体的文档,只有一些指向这个方向的主题。Python的官方文档确实会受益于这类信息。在
如果你看一下^{} method in the CPython source ,你会发现它没有释放GIL。在
这意味着在CPython进程中一次只能发生一个
set.pop
。在因为^{} checks if the set is empty ,你只能通过尝试从一个空的集合中弹出来引起
IndexError
。在所以不,不能通过使用CPython从多个线程中弹出一个集合来破坏数据。在
相关问题 更多 >
编程相关推荐