既然 Python 有全局锁,只能是单线程。 那我两个线程同时往一个列表里写东西,还需要加锁吗?
既然 Python 有全局锁,只能是单线程。 那我两个线程同时往一个列表里写东西,还需要加锁吗?
|
dbowMay 24, 2023
1
不能保证顺序
|
|
cnuser002May 24, 2023
2
append 可以不加锁。参考 https://docs.python.org/3.5/faq/library.html#what-kinds-of-global-value-mutation-are-thread-safe
GIL 可以保证同一时间只有一个线程在活动,但如果你的操作本身不是原子操作,就是说由几步构成的,那有可能你干到一半就切到另一个线程上了。 |
|
deplivesbMay 24, 2023
3
|
|
CEBBCATMay 24, 2023
4
单核 CPU 就没有并发问题了吗 XD
|
|
5
@cnuser002 明白了,GIL 锁和多线程的锁完全是两码事。多线程的锁在 Python 上也不可少,其他语言多个线程是同时运行,Python 是切换着运行。无论哪种方式,只要涉及到线程切换就需要在临界区加锁。
|
|
6
@CEBBCAT 对。我之前理解错了。
|
|
whoosyMay 24, 2023
7
GIL 锁的是字节码指令,一行代码有可能涉及到多个字节码指令
|
|
nethardMay 25, 2023
8
在 cpython 里可以认为是安全的
|