发布于2019-08-07 16:34 阅读(1026) 评论(0) 点赞(4) 收藏(5)
作用:
解决资源竞争问题
死锁:
当一组线/进程中的每个线/进程都在等待某个事件发生,而只有这组线/进程中的其他进程才能触发该事件,这就称这组线/进程发生了死锁。
创建的锁过多,可能会造成死锁问题。
可以在设计程序时从逻辑上避免死锁出现,延时、银行家算法等
# 以下代码如未使用互斥锁,最终计算出来的的数值会出错(比实际数小)
# 上锁的代码越少越好,只在关键位置加锁 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.pythonheidong.com/blog/article/11547/c9223ecb2bf206f84a0e/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!