從Python角度理解mutex

  • mutex(維基百科 )

    According Wikipedia, Mutex(Mutual exclusion) 互斥鎖,是一種用於多線程編程中,防止兩條線程同時對同一公共資源(比如全局變量)進行讀寫的機制。

    通過將代碼切片成一個一個的臨界區域(critical section)達成。

    臨界區域,指的是一塊對公共資源進行訪問的代碼,並非一種機制或算法。

    確保同一時間只有一個臨界區域處於運行狀態,而其他的臨界區域,無論是讀是寫,都必須被掛起並且不能獲得運行機會。

    一個程序、進程、線程可以擁有多個臨界區域,但是並不一定會應用互斥鎖。

  • 舉例理解mutex

    一個多人激烈爭論的會議上,人人搶着發言誰都聽不清。

    主持人拿來一個塑料尖叫雞,誰拿着尖叫雞誰說話,想說話的只能向支持人示意,發言人發言結束後把尖叫雞給主持人,主持人再給下一個想要發言的人。

    其中主持人就是操作系統;尖叫雞就是mutex。

  • 延伸概念

    • 線程不安全

      多個線程同時訪問某一資源,對數據造成破壞,使得線程運行的結果不可預期。

    • 數據共享與鎖定/非鎖定

      線程同步保證多個線程安全訪問競爭資源,最簡單的同步機制是加入互斥鎖。

      互斥鎖爲資源引入一個狀態:鎖定/非鎖定。

      某個線程要更改共享數據時,先將其鎖定,此時資源的狀態爲“鎖定”,其他線程不能更改,知道改線程釋放資源,將資源的狀態變成“非鎖定”,其他的線程才能再次鎖定改資源。

      互斥鎖保證了每次只有一個線程進行寫入操作。

  • mutex In Python

    以前有一個mutex module which has been deprecated since version 2.6。

    後來使用threading模塊的Lock()方法。

    >>> mutex = threading.Lock()
    
    >>> mutex.acquire()
    >>> print("mutex is now locked")
    
    >>> mutex.release()
    >>> print("mutex is now unlocked")
    
  • Reference

  1. What is a mutex?
  2. Python多線程編程(3): 使用互斥鎖同步線程
  3. Python mutex example
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章