[英]Multithreaded Access to Python bytearray
為了澄清作為注釋寫的簡短答案:您可以在不保存GIL的情況下訪問* buf數據,前提是您確定Py_buffer結構在沒有GIL的情況下由線程“擁有”。
為了完整起見,我應該補充一點,這可能會打開(非常遠程)崩潰風險的大門:如果無GIL線程在* buf讀取數據,同時另一個GIL持有線程正在運行Python代碼更改相同的數據(bytearray [index] = x),然后無GIL的線程可以看到其腳下數據的意外更改。 相反的情況也是如此,甚至更煩人(但仍然是理論上的):如果無GIL的線程在* buf處更改數據,那么其他持有GIL的,運行Python的線程可能會看到奇怪的結果,甚至可能會在執行某些操作時崩潰復雜的讀取操作,如bytearray.split()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.