既然 Python 有全局锁,只能是单线程。 那我两个线程同时往一个列表里写东西,还需要加锁吗?
1
dbow 2023-05-24 15:59:44 +08:00
不能保证顺序
|
2
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 可以保证同一时间只有一个线程在活动,但如果你的操作本身不是原子操作,就是说由几步构成的,那有可能你干到一半就切到另一个线程上了。 |
3
deplivesb 2023-05-24 16:40:27 +08:00
|
4
CEBBCAT 2023-05-24 17:09:49 +08:00
单核 CPU 就没有并发问题了吗 XD
|
5
sbldehanhan OP @cnuser002 明白了,GIL 锁和多线程的锁完全是两码事。多线程的锁在 Python 上也不可少,其他语言多个线程是同时运行,Python 是切换着运行。无论哪种方式,只要涉及到线程切换就需要在临界区加锁。
|
6
sbldehanhan OP @CEBBCAT 对。我之前理解错了。
|
7
whoosy 2023-05-24 18:05:03 +08:00
GIL 锁的是字节码指令,一行代码有可能涉及到多个字节码指令
|
8
nethard 2023-05-25 00:45:49 +08:00
在 cpython 里可以认为是安全的
|