2015-10-19 93 views
0

我讀了一些索引列表的地方,例如l [3]是一個原子操作。由於全球解釋鎖定而實現原子性。關於Python語句的原子性和全局解釋器鎖

+0

相關:[什麼樣的全局值突變是線程安全的?](http://effbot.org/pyfaq/what-kinds-of-global-value-mutation-are-thread-safe.htm) – unutbu

+0

@unutbu:是的,我也偶然發現了這個問題,但它的年齡是未知數,我也無法驗證它是否也適用於現代Python。 –

+0

@unutbu:官方py2.7來源:https://docs.python.org/2/faq/library.html#what-kinds-of-global-value-mutation-are-thread-safe最後一句:**如有疑問,請使用互斥體!** –

回答

1

是的,編制索引應該是原子,只要你在本地列表上做,而不是一個人可以重定向__getitem__;然而,這是一個實現細節,你不能依賴它。

不,這不僅僅是因爲GIL,而是因爲線程之間的切換隻允許在單個解釋器指令之間切換,並且索引是這樣的一條指令,但只能在CPython中執行。

外賣:不要依賴高級腳本語言中的原子性,例如python;如果你需要障礙,那麼使用信號量或顯式原子數據類型。