python 线程锁
由于线程之间随机调度:某线程可能在执行n条后,CPU接着执行其他线程。为了多个线程同时操作一个内存中的资源时不产生混乱,我们使用锁。
Lock(指令锁)是可用的最低级的同步指令。Lock处于锁定状态时,不被特定的线程拥有。Lock包含两种状态——锁定和非锁定,以及两个基本的方法。
可以认为Lock有一个锁定池,当线程请求锁定时,将线程至于池中,直到获得锁定后出池。池中的线程处于状态图中的同步阻塞状态。
创建锁:
lock=threading.Lock()
cond=threading.Condition(lock=lock)
锁的方法:
cond.acquire(): 获得锁
cond.wait() 等待通知
cond.notify() 通知正在等待的锁
cond.notify_all() 通知所有正在等待的锁
cond.release() 释放锁
实例:
当多线程争夺锁时,允许第一个获得锁的线程进入临街区,并执行代码。
所有之后到达的线程将被阻塞,直到第一个线程执行结束,退出临街区,
并释放锁。需要注意,那些阻塞的线程是没有顺序的。
import threading,time
lista=[]
class huofu(threading.Thread):
def run(self):
while True:
condchi.acquire()
if len(lista)==0:
for i in range(1,11):
lista.append(i)
print("正在生产第{}个馒头".format(i))
time.sleep(1)
condchi.notify_all()
condchi.release()
class chihuo(threading.Thread):
def __init__(self,name):
threading.Thread.__init__(self)
self.name=name
def run(self):
mantou=[]
while True:
condchi.acquire()
if len(lista)>0:
mantou=lista.pop()
time.sleep(1)
else:
condhuo.acquire()
condhuo.notify()
condhuo.release()
condchi.wait()
condchi.release()
if mantou not in lista:
print("{}在吃第{}个馒头".format(self.name,mantou))
lock1=threading.Lock()
condhuo=threading.Condition(lock1)
lock2=threading.Lock()
condchi=threading.Condition(lock2)
huofu1=huofu()
chihuo1=chihuo("handao")
chihuo2=chihuo("tanzhenghua")
chihuo3=chihuo("laowang")
huofu1.start()
chihuo1.start()
chihuo2.start()
chihuo3.start()
相关知识
Python笔试题
线程池提交任务的两种方式:execute与submit的区别
Python期末作业
国运:扮演李逍遥,队友东方镜
解决多线程中资源竞争
高并发之——死锁,死锁的四个必要条件以及处理策略
Python小练习
python运行run在哪
python 练习题
python学习总结day2
网址: python 线程锁 https://www.mcbbbk.com/newsview285788.html
上一篇: 宇宙资源争夺战小游戏,在线玩,4 |
下一篇: java多线程面试题整理及答案 |
推荐分享

- 1我的狗老公李淑敏33——如何 5096
- 2南京宠物粮食薄荷饼宠物食品包 4363
- 3家养水獭多少钱一只正常 3825
- 4豆柴犬为什么不建议养?可爱的 3668
- 5自制狗狗辅食:棉花面纱犬的美 3615
- 6狗交配为什么会锁住?从狗狗生 3601
- 7广州哪里卖宠物猫狗的选择性多 3535
- 8湖南隆飞尔动物药业有限公司宠 3477
- 9黄金蟒的价格 3396
- 10益和 MATCHWELL 狗 3352