互斥锁
2019-02-17 01:52:19来源:博客园 阅读 ()
作用:
解决资源竞争问题
死锁:
当一组线/进程中的每个线/进程都在等待某个事件发生,而只有这组线/进程中的其他进程才能触发该事件,这就称这组线/进程发生了死锁。
创建的锁过多,可能会造成死锁问题。
可以在设计程序时从逻辑上避免死锁出现,延时、银行家算法等
# 以下代码如未使用互斥锁,最终计算出来的的数值会出错(比实际数小)
# 上锁的代码越少越好,只在关键位置加锁 import threading import 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
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- linux安装 uwsgi 测试 test.py 不显示hello world 的解决办 2019-08-13
- 解决python中的Non-UTF-8 code starting with ‘\xbs4’ in 2019-07-24
- Python Threading 线程/互斥锁/死锁/GIL锁 2019-07-24
- python 之 并发编程(守护进程、互斥锁、IPC通信机制) 2019-07-24
- Python 用(无脑 and 有脑)方式解决小练习 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash