
既然 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 里可以认为是安全的 |