互斥锁 并行变成串行,牺牲效率 保证数据安全,实现局部串行
保护不同的数据,应该加不同的锁
现在一个进程 可以有多个线程 所有线程都共享进程的地址空间 实现数据共享
共享带来问题就会出现竞争 竞争就会出现改乱数据
每个子线程都去执行task函数 代码 都拿到n=99
这种方法效率高 ,但是导致数据不安全
并发执行
from threading import Thread import time n = 100 def task(): # 定义全局变量 global n tmp = n time.sleep(0.5) n = tmp - 1 if __name__ == "__main__": t_list = [] for i in range(100): t = Thread(target=task) t_list.append(t) t.start() for t in t_list: t.join() print("主线程", n) ''' 每个子线程都去执行task函数 代码 都拿到n=99 这种方法效率高 但是导致数据不安全 并发执行 ''' ''' 主线程 99 '''
加上互斥锁 牺牲效率 保证数据安全
通过把并发变成串行
from threading import Thread, Lock import time n = 100 def task(mitex): # 定义全局变量 global n mitex.acquire() tmp = n time.sleep(0.1) n = tmp - 1 mitex.release() if __name__ == "__main__": mitex= Lock() t_list = [] for i in range(100): t = Thread(target=task, args=(mitex,)) t_list.append(t) t.start() for t in t_list: t.join() print("主线程", n) # 主线程 0