当前位置: 首页 > news >正文

Python:互斥锁,线程同步及总结

资源竞争解决办法:

1.线程等待 join

2.互斥锁

同步:
线程同步:目的是按顺序进行

线程等待:

from threading import Thread,Lock
a=0
b=1000000

#解决办法一
def sum1():
    for i in range(b):
        global a #a为整型,修改值时引用地址会改变,需声明
        a+=1
    print(f'第一次:{a}\n',end='')


def sum2():
    for i in range(b):
        global a #a为整型,修改值时引用地址会改变,需声明
        a+=1
    print(f'第二次:{a}\n',end='')

if __name__ == "__main__":
    # 创建线程
    thread = Thread(target=sum1)
    thread1 = Thread(target=sum2)
    # 启动线程
    thread.start()
    thread.join()
    thread1.start()
    # 等待线程结束
    # thread.join()
    # thread1.join()

互斥锁:能够保证多个线程访问共享数据不会出现数据错误问题,对共享数据进行锁定,保证同一时刻只能有一个线程操作

互斥锁的使用:

1.threading模块中定义Lock()  锁

2.acquire  加锁  release 释放锁

3.如果在调用acquire方法时,其他线程已经使用了这个互斥锁,那么此时acquire方法会堵塞,知道这个互斥锁释放后才能再次上锁

4.Lock有acquire()和release(),成对出现的,先加锁释放锁才能再加锁等操作,否则会造成死锁

from threading import Thread,Lock
a=0
b=1000000

#解决办法一
#1.创建全局互斥锁
lock=Lock()

def sum1():
    lock.acquire()#加锁
    for i in range(b):
        global a #a为整型,修改值时引用地址会改变,需声明
        a+=1
    print(f'第一次:{a}\n',end='')
    lock.release()#解锁

def sum2():
    lock.acquire()
    for i in range(b):
        global a #a为整型,修改值时引用地址会改变,需声明
        a+=1
    print(f'第二次:{a}\n',end='')
    lock.release()

if __name__ == "__main__":
    # 创建线程
    thread = Thread(target=sum1)
    thread1 = Thread(target=sum2)
    # 启动线程
    thread.start()
    thread1.start()
    # 等待线程结束
    thread.join()
    thread1.join()

输出结果为:
第一次:1000000
第二次:2000000

相关文章:

  • 脑启发式AI Agent:解锁人类大脑奥秘,迈向真正的通用人工智能(AGI)
  • Dify - 架构、部署、扩展与二次开发指南
  • 大模型概述
  • spring-security原理与应用系列:总体流程
  • Web Workers 教程
  • 前端知识点---innerHTML和innerText
  • Turtle基本操作(前进、后退、旋转)
  • QT零基础学习之路(十)--QDialog对话框的使用及信息传递
  • el-tree树多选,将选中的树对象中某个字段值改为true,并过滤出所有为true的对象,组成新的数组
  • 开源图生视频模型技术全景解析
  • QT学习笔记(对话框)
  • Next.Js 权限绕过漏洞复现(附脚本)(CVE-2025-29927)
  • Vue打包后如何在本地进行测试(附解决浏览器刷新无法访问的问题)
  • 【数据库-复试】sql语句综合练习
  • Mysql--日志(错误日志、二进制日志、查询日志、慢查询日志)
  • 使用 fn_dblog手动恢复误操作的 update(单列数值型数据恢复)
  • 用卡片笔记要改变写作习惯
  • (并查集 省份数量)leetcode 547
  • Sqladmin - FastAPI框架下一键生成管理后台
  • Git 钩子:特定操作脚本
  • 以色列总理:以哈谈判内容包括“结束战争的框架”
  • 美国失去最后的AAA主权评级,继标普、惠誉后再遭穆迪降级
  • 李强:把做强国内大循环作为推动经济行稳致远的战略之举
  • “养胃骗局”大公开,真正有用的方法究竟是?
  • 押井守在30年前创造的虚拟世界何以比当下更超前?
  • 上海国际电影节纪录片单元,还世界真实色彩