Lock 互斥锁
44.5 Lock 互斥锁
多线程同时改同一变量可能数据错乱,用 Lock 保证「同一时刻只有一个线程进入临界区」。
lock.acquire() / lock.release(),推荐 with lock: 自动释放。
无锁 vs 有锁
# ========================================
# 示例:Lock 保护共享变量
# 说明:counter += 1 非原子,多线程会丢计数
# ========================================
import threading
counter = 0
lock = threading.Lock()
def add_many():
global counter
for _ in range(100000):
with lock: # 加锁,保证 += 完整执行
counter += 1
threads = [threading.Thread(target=add_many) for _ in range(4)]
for t in threads:
t.start()
for t in threads:
t.join()
print('counter =', counter) # 400000