Python 中的互斥锁
Ishaan Shrivastava
2021年10月2日
Mutex 是互斥的意思。这意味着在给定的特定时间,只有一个线程可以使用特定资源。如果一个程序具有多线程,则互斥会限制线程同时使用该特定资源。它锁定其他线程并限制它们进入临界区。
本教程将演示互斥锁在 Python 中的使用。
要在 Python 中实现互斥锁,我们可以使用 threading
模块中的 lock()
函数来锁定线程。如果第二个线程即将在第一个线程之前完成,它将等待第一个线程完成。我们锁定第二个线程以确保这一点,然后我们让它等待第一个线程完成。当第一个线程完成时,我们释放第二个线程的锁。
请参考下面给出的代码。
import threading, time, 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
语句之后,而不是之前,因为只要线程在等待,它就还没有完成。
因此,锁定线程非常重要。否则,如果两个线程同时共享相同的资源,应用程序可能会崩溃。