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