import threading
from time import sleep
m = 0
# 定义一个业务函数
def func():
global m
for i in range(1000000):
m += 1
print("当前线程为:",threading.current_thread().name)
print(m)
# 线程冲突(线程不安全)
def conflict():
# 创建5个线程,这5个线程同时访问一个外部变量m
for _ in range(5):
t = threading.Thread(target=func)
t.start()
# 当多个线程同时访问同一个外部资源的时候,就会发生线程冲突,造成外部文件的不安全
# 【解决线程冲突】
# 1、线程同步
def threadSyc():
for _ in range(5):
t = threading.Thread(target=func)
t.start()
# 将开启的线程加入到同步对列
t.join()
# 同步即串行,将所有的线程都加入到同一个同步对列,前面的线程不执行完,后面的线程不开启
# 同步的缺点就是会阻塞线程
# 2、对外部公共资源加锁
# 创建一个互斥锁
lock = threading.Lock()
def func2():
global m
# 使用外部资源m之前加锁
if lock.acquire():
for i in range(1000000):
m += 1
print(m)
# 用完的外部资源,把锁释放
lock.release()
print("当前线程为:",threading.current_thread().name)
def threadLock():
for _ in range(5):
t = threading.Thread(target=func2)
t.start()
if __name__ == '__main__':
threadLock()
线程冲突-线程同步-互斥锁
最新推荐文章于 2022-12-13 12:07:18 发布