1,死锁

死锁代码示例:

 import time
from threading import Lock, Thread noodle_lock = Lock()
fork_lock = Lock() def eat1(name):
noodle_lock.acquire()
print('%s拿到面了'%name)
fork_lock.acquire()
print('%s拿到叉子了'%name)
print('%s吃面'%name)
fork_lock.release()
noodle_lock.release() def eat2(name):
fork_lock.acquire()
print('%s拿到叉子了' % name)
time.sleep(1)
noodle_lock.acquire()
print('%s拿到面了'%name)
print('%s吃面'%name)
noodle_lock.release()
fork_lock.release() Thread(target=eat1,args=('alex',)).start()
Thread(target=eat2,args=('Egon',)).start()
Thread(target=eat1,args=('bossjin',)).start()
Thread(target=eat1,args=('nezha',)).start()

运行结果:

2,线程锁只能保证同一时间只有一个线程取n值,并不能保证数据安全

3,加锁保证了n不会被多个线程操纵;加锁保证数据安全

 import time
from threading import Lock,Thread def func(lock):
global n
#加锁保证了n不会被多个线程操纵
#获取锁的钥匙,加锁
lock.acquire()
temp = n
time.sleep(0.2)#睡眠0.2s
n = temp -1
#释放锁
lock.release() n = 10
t_lst = []
lock = Lock()
for i in range(10):
t = Thread(target=func,args=(lock,))
t.start()
t_lst.append(t) for t in t_lst:t.join()
print(n)

运行结果:

最新文章

  1. easyui datagrid中 多表头方法总结
  2. Struts2:java.lang.NoSuchFieldException: resourceEntries at java.lang.Class.getDeclaredField(Class.java:1901)
  3. Jquery幻灯片焦点图插件
  4. [转] 判断html页是否滚动停止
  5. PHP 'ext/soap/php_xml.c'不完整修复多个任意文件泄露漏洞
  6. 破解Veeam过程
  7. GroundworkCSS ♥ Tables
  8. bg-render+bg-class+filter
  9. util包就是用来放一些公用方法和数据结构的
  10. HDFS追本溯源:体系架构详解
  11. golang 框架 之 CHI
  12. 做rl_abs过程中遇到的问题
  13. swust oj 237
  14. HDU-6153 A Secret 扩展KMP
  15. jmeter 控制线程组执行顺序
  16. 《温故而知新》JAVA基础七
  17. Redis核心原理
  18. 现代程序设计 homework-01
  19. layer弹窗插件自带自写经验
  20. React文档(五)组件和props

热门文章

  1. css中用一张背景图做页面的技术有什么优势?
  2. 移动web图片高度自适应的解决方案
  3. adb安装apk包时提示:device unauthorized
  4. POJ 1845 (洛谷 :题目待添加)Sumdiv
  5. 深入浅出Cocoa 之动态创建类【转】
  6. day16 web前端之JavaScript
  7. oracle在不知道用户密码的时候,怎么样跳转到另外一个用户执行操作后并不影响该用户?
  8. 洛谷P2607 骑士
  9. InteractiveHtmlBom 在手机上无法显示 BOM List 和装配图的问题
  10. linux下安装使用MySQL 以及 python mysqldb 遇到的问题