递归锁,死锁,使用递归锁解决死锁,信号量
生活随笔
收集整理的這篇文章主要介紹了
递归锁,死锁,使用递归锁解决死锁,信号量
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
遞歸鎖
- 互斥鎖
- 遞歸鎖
死鎖
- 死鎖就是在使用互斥鎖的時候,同時開啟了兩把鎖,就會導(dǎo)致死鎖問題
- 因為同一時間只能由一個線程打開鎖,然后關(guān)閉鎖之后才可以去有另外一個線程去執(zhí)行鎖
- 就是一個線程還沒有釋放一個鎖,但是另一個線程已經(jīng)拿到了其他鎖的鑰匙,導(dǎo)致第一個執(zhí)行的線程沒辦法拿到下一個鎖的鑰匙,也沒辦法執(zhí)行完
- 他和你另一個線程就會處在一個一直等待需要要是開下一把鎖的狀態(tài)
使用遞歸鎖解決死鎖
from threading import Thread,RLock,Lock import timelock1 = RLock()def foo(name):lock1.acquire()print(f"{name}抱起貓")time.sleep(3) # 模擬線程被中斷去執(zhí)行其他的線程lock1.acquire()print(f"{name}抱起狗")lock1.release()lock1.release()def foo1(name):lock1.acquire() # 注意看鎖的名字,和上面的不一樣print(f"{name}抱起狗")lock1.acquire()print(f"{name}抱起貓")lock1.release()lock1.release()t = Thread(target=foo,args=('Cheer',)).start() t1 = Thread(target=foo1,args=('PI',)).start()信號量
from threading import Thread,Semaphore import time # 信息量:也就是廁所開放多少個坑,一次性運行的線程數(shù),之前的加鎖了,一次只有一個線程通過,這次不一樣了,這次好幾個# 實例化一個信息量 sem = Semaphore(4) # 括號里面的數(shù)值是開放多少個"坑位"def foo(i):sem.acquire() # 和鎖的用法一樣print(f"哈哈哈,{i}進來了")time.sleep(i+1)sem.release()print(f"哈哈哈,{i}干完了")for i in range(10):t = Thread(target=foo,args=(i,)).start()轉(zhuǎn)載于:https://www.cnblogs.com/xiongchao0823/p/11543737.html
總結(jié)
以上是生活随笔為你收集整理的递归锁,死锁,使用递归锁解决死锁,信号量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 并发编程中的GIL锁(全局解释器锁)自己
- 下一篇: Codeforces 1188