Python3多線程之間的執行順序問題


[本文出自天外歸雲的博客園]

一個多線程的題:定義三個線程ID分別為ABC,每個線程打印10遍自己的線程ID,按ABCABC……的順序進行打印輸出。

我的解法:

from threading import Thread, Lock


# 由_acquire解鎖執行后釋放_release鎖
def _print(_id: str, _acquire: Lock, _release: Lock) -> None:
    for i in range(10):
        _acquire.acquire()
        print(f"id:{_id}")
        _release.release()


if __name__ == '__main__':
    # 創建三個鎖供3個線程使用
    mutex1 = Lock()
    mutex2 = Lock()
    mutex3 = Lock()
    # 定義三個線程A、B、C
    # 線程A需要mutex1解鎖執行后釋放mutex2
    # 線程B需要mutex2解鎖執行后釋放mutex3
    # 線程C需要mutex3解鎖執行后釋放mutex1
    # 元組中第一位是自定義的線程ID,第二位是解鎖需要的鎖,第三位是釋放的鎖
    threads = [Thread(target=_print, args=[i[0], i[1], i[2]]) for i in
               [('A', mutex1, mutex2), ('B', mutex2, mutex3), ('C', mutex3, mutex1)]]
    # 把mutex2和mutex3這兩把鎖先用了以便阻塞線程2和線程3的執行
    mutex2.acquire()
    mutex3.acquire()
    # 接下來只有線程A可以先執行是因為mutex1並沒有被占用
    # 線程B和線程C需要分別等待着鎖2和鎖3的釋放才能繼續執行
    [thr.start() for thr in threads]
    [thr.join() for thr in threads]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM