MST
星途 面试题库

面试题:Python多线程中如何使用互斥锁实现简单资源同步

假设有一个共享资源(例如一个全局变量count),在多线程环境下,需要对其进行增减操作。请用Python代码实现使用互斥锁来确保count在多线程操作时数据的一致性,写出完整的代码,并解释关键部分的作用。
11.9万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
import threading

# 共享资源
count = 0
# 创建互斥锁
mutex = threading.Lock()


def increment():
    global count
    # 获取锁,确保同一时间只有一个线程能进入临界区
    mutex.acquire()
    try:
        count += 1
    finally:
        # 释放锁,允许其他线程获取锁进入临界区
        mutex.release()


def decrement():
    global count
    mutex.acquire()
    try:
        count -= 1
    finally:
        mutex.release()


# 创建线程
thread1 = threading.Thread(target=increment)
thread2 = threading.Thread(target=decrement)

# 启动线程
thread1.start()
thread2.start()

# 等待线程结束
thread1.join()
thread2.join()

print(f"最终count的值: {count}")

关键部分解释:

  1. mutex = threading.Lock():创建一个互斥锁对象,用于控制对共享资源count的访问。
  2. mutex.acquire():线程调用此方法来获取锁。如果锁可用(未被其他线程持有),则获取锁并继续执行后续代码;如果锁不可用,则线程会阻塞,直到锁被释放。
  3. try - finally:在获取锁后,使用try块包含对共享资源count的操作,以确保无论操作过程中是否发生异常,都能在finally块中调用mutex.release()释放锁,避免死锁。
  4. mutex.release():释放锁,允许其他等待获取锁的线程获取锁并进入临界区操作共享资源。