Python 中的互斥鎖
Ishaan Shrivastava
2021年10月2日
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
語句之後,而不是之前,因為只要執行緒在等待,它就還沒有完成。
因此,鎖定執行緒非常重要。否則,如果兩個執行緒同時共享相同的資源,應用程式可能會崩潰。