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