博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
互斥锁
阅读量:5306 次
发布时间:2019-06-14

本文共 1083 字,大约阅读时间需要 3 分钟。

作用:

  解决资源竞争问题

死锁:

  当一组线/进程中的每个线/进程都在等待某个事件发生,而只有这组线/进程中的其他进程才能触发该事件,这就称这组线/进程发生了死锁。

  创建的锁过多,可能会造成死锁问题。

  可以在设计程序时从逻辑上避免死锁出现,延时、银行家算法等

 

# 以下代码如未使用互斥锁,最终计算出来的的数值会出错(比实际数小)

# 上锁的代码越少越好,只在关键位置加锁import threadingimport time# 定义一个全局变量g_num = 0# 创建一个互斥锁,默认没有上锁mutex = threading.Lock()def func1(num):    global g_num    # 如上锁之前没有上锁,此时上锁成功    # 如上锁之前已被上锁,此时会堵塞在这里,直到锁被解开    for i in range(num):        # 上锁        mutex.acquire()        g_num += 1        # 解锁        mutex.release()    print("in func1 g_num=%d" % g_num)def func2(num):    global g_num    for i in range(num):        # 上锁        mutex.acquire()        g_num += 1        # 解锁        mutex.release()    print("in func2 g_num=%d" % g_num)def main():    # target指定将来这个线程去哪个函数执行代码    # args指定将来调用函数的时候,传递什么数据过去    t1 = threading.Thread(target=func1, args=(1000000,))    t2 = threading.Thread(target=func2, args=(1000000,))    t1.start()    t2.start()    # 等待上面2个线程执行完毕..    time.sleep(5)    print("in main Thread g_num=%d" % g_num)if __name__ == "__main__":    main()

 

转载于:https://www.cnblogs.com/Selling-fish-bears/p/10369195.html

你可能感兴趣的文章
javaagent 简介
查看>>
《Linux4.0设备驱动开发详解》笔记--第十四章:Linux网络设备驱动
查看>>
C++学习之智能指针
查看>>
python升级安装后的yum的修复
查看>>
Vim配置Node.js开发工具
查看>>
iOS开发者需要的5款排版工具
查看>>
web前端面试题2017
查看>>
Reflection in Teaching
查看>>
intellij idea 将模块打jar包
查看>>
给MySQL增加Sequence管理功能
查看>>
ELMAH——可插拔错误日志工具
查看>>
MySQL学习笔记(四)
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>
两数和
查看>>
Python subprocess 模块
查看>>
Http协议
查看>>
c#获取文件路径
查看>>
移动设备和SharePoint 2013 - 第3部分:推送通知
查看>>
SOPC Builder中SystemID
查看>>
MySQL数据库备份工具mysqldump的使用(转)
查看>>