1
在Python 3.4.3上,我無法理解threading.Lock.acquire()如何鎖定,直到鎖定狀態設置爲解鎖。threading.Lock.acquire()如何在此實現中阻塞?
threading.Lock
似乎是上面鏈接的_dummy_thread.LockType
的執行。
此代碼似乎在做什麼,但阻止。如果我是正確的,那麼threading.lock的阻塞行爲的實現在哪裏?
在Python 3.4.3上,我無法理解threading.Lock.acquire()如何鎖定,直到鎖定狀態設置爲解鎖。threading.Lock.acquire()如何在此實現中阻塞?
threading.Lock
似乎是上面鏈接的_dummy_thread.LockType
的執行。
此代碼似乎在做什麼,但阻止。如果我是正確的,那麼threading.lock的阻塞行爲的實現在哪裏?
您鏈接的功能是一個虛擬實現的接口。這意味着它什麼都不做。沒有阻塞。當你沒有真正使用線程時,它會被使用,以減輕可以在線程和非線程環境中工作的代碼的編寫。
你想看看該功能在threading.py
它沒有太多的現象,因爲實際的實現是用C完成後,_thread
模塊中。它在python解釋器的編譯時被選中。你可以在這裏找到pthread和windows的實現。
即,Windows實現使用WaitForSingleObjectEx,而pthread實現使用sem_timedwait。
在提供的鏈接上,我無法看到它阻止的位置。你能解釋一下嗎? – sargas
我添加了一些更多的細節,包括實際行爲的實現。它在C子模塊中。 – spectras
正是我希望找到的! – sargas