Python 中的互斥鎖

Ishaan Shrivastava 2021年10月2日
Python 中的互斥鎖

Mutex 是互斥的意思。這意味著在給定的特定時間,只有一個執行緒可以使用特定資源。如果一個程式具有多執行緒,則互斥會限制執行緒同時使用該特定資源。它鎖定其他執行緒並限制它們進入臨界區。

本教程將演示互斥鎖在 Python 中的使用。

要在 Python 中實現互斥鎖,我們可以使用 threading 模組中的 lock() 函式來鎖定執行緒。如果第二個執行緒即將在第一個執行緒之前完成,它將等待第一個執行緒完成。我們鎖定第二個執行緒以確保這一點,然後我們讓它等待第一個執行緒完成。當第一個執行緒完成時,我們釋放第二個執行緒的鎖。

請參考下面給出的程式碼。

import threading
import time
import random

mutex = threading.Lock()


class thread_one(threading.Thread):
    def run(self):
        global mutex
        print("The first thread is now sleeping")
        time.sleep(random.randint(1, 5))
        print("First thread is finished")
        mutex.release()


class thread_two(threading.Thread):
    def run(self):
        global mutex
        print("The second thread is now sleeping")
        time.sleep(random.randint(1, 5))
        mutex.acquire()
        print("Second thread is finished")


mutex.acquire()
t1 = thread_one()
t2 = thread_two()
t1.start()
t2.start()

輸出:

The first thread is now sleeping
The second thread is now sleeping
First thread is finished
Second thread is finished

在這段程式碼中,直到第一個執行緒完成後,第二個執行緒才會被釋放。第二個執行緒等待鎖中的第一個執行緒。程式碼中使用了 global 關鍵字,因為兩個執行緒都使用它。請注意,print 語句緊跟在 acquire 語句之後,而不是之前,因為只要執行緒在等待,它就還沒有完成。

因此,鎖定執行緒非常重要。否則,如果兩個執行緒同時共享相同的資源,應用程式可能會崩潰。