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

2023-05-24 15:47:36 +08:00
 sbldehanhan

既然 Python 有全局锁,只能是单线程。 那我两个线程同时往一个列表里写东西,还需要加锁吗?

1832 次点击
所在节点    Python
8 条回复
dbow
2023-05-24 15:59:44 +08:00
不能保证顺序
cnuser002
2023-05-24 16:03:19 +08:00
append 可以不加锁。参考 https://docs.python.org/3.5/faq/library.html#what-kinds-of-global-value-mutation-are-thread-safe

GIL 可以保证同一时间只有一个线程在活动,但如果你的操作本身不是原子操作,就是说由几步构成的,那有可能你干到一半就切到另一个线程上了。
deplivesb
2023-05-24 16:40:27 +08:00
看字节码,不是线程安全的
![iTerm2-Bob-20230524163943@2x.jpg]( https://s2.loli.net/2023/05/24/Ihwap65FtRogUM1.jpg)
CEBBCAT
2023-05-24 17:09:49 +08:00
单核 CPU 就没有并发问题了吗 XD
sbldehanhan
2023-05-24 17:15:28 +08:00
@cnuser002 明白了,GIL 锁和多线程的锁完全是两码事。多线程的锁在 Python 上也不可少,其他语言多个线程是同时运行,Python 是切换着运行。无论哪种方式,只要涉及到线程切换就需要在临界区加锁。
sbldehanhan
2023-05-24 17:16:22 +08:00
@CEBBCAT 对。我之前理解错了。
whoosy
2023-05-24 18:05:03 +08:00
GIL 锁的是字节码指令,一行代码有可能涉及到多个字节码指令
nethard
2023-05-25 00:45:49 +08:00
在 cpython 里可以认为是安全的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/942605

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX