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

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