互斥锁 并行变成串行, 牺牲效率 保证数据安全
现在一个进程 可以有多个线程 所有线程都共享进程的地址空间 实现数据共享
共享带来问题就会出现竞争 竞争就会出现改乱数据
每个子线程都去执行 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
来源: http://www.bubuko.com/infodetail-3098908.html