MST

星途 面试题库

面试题:Python中互斥锁的常见应用场景及示例

请举例说明Python中互斥锁(Mutex)在多线程编程中的常见应用场景,并编写一个简单的代码示例展示其用法。
27.2万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

常见应用场景

在多线程编程中,当多个线程需要访问共享资源(如文件、数据库连接、共享变量等)时,如果不加以控制,可能会导致数据竞争和不一致性问题。互斥锁(Mutex)可用于确保同一时间只有一个线程能够访问共享资源,从而避免这些问题。例如,多个线程同时对一个共享的计数器进行加一操作,如果没有互斥锁保护,可能会出现计算结果错误的情况。

代码示例

import threading

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


def increment():
    global counter
    for _ in range(1000000):
        # 获取锁
        mutex.acquire()
        try:
            counter += 1
        finally:
            # 释放锁
            mutex.release()


threads = []
for _ in range(2):
    t = threading.Thread(target=increment)
    threads.append(t)
    t.start()

for t in threads:
    t.join()

print(f"Final counter value: {counter}")

在上述代码中,mutex.acquire() 用于获取锁,确保同一时间只有一个线程能进入临界区(对 counter 进行操作的代码块)。try - finally 块确保无论在临界区内发生什么,锁最终都会被释放,避免死锁情况。通过使用互斥锁,两个线程对 counter 的操作不会相互干扰,保证了数据的一致性。