Python 中的互斥锁

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

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 语句之后,而不是之前,因为只要线程在等待,它就还没有完成。

因此,锁定线程非常重要。否则,如果两个线程同时共享相同的资源,应用程序可能会崩溃。