面试题答案
一键面试常见应用场景
在多线程编程中,当多个线程需要访问共享资源(如文件、数据库连接、共享变量等)时,如果不加以控制,可能会导致数据竞争和不一致性问题。互斥锁(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
的操作不会相互干扰,保证了数据的一致性。