日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

递归锁,死锁,使用递归锁解决死锁,信号量

發布時間:2025/6/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 递归锁,死锁,使用递归锁解决死锁,信号量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

遞歸鎖

  • 互斥鎖
from threading import Lock lock_1 = Lock() lock_1.acquire() lock_1.acquire() print(123) # 打印結果:無法打印,并且程序阻塞住了
  • 遞歸鎖
from threading import RLock lock_2 = RLock() lock_2.acquire() lock_2.acquire() print(123) # 打印結果:123

死鎖

  • 死鎖就是在使用互斥鎖的時候,同時開啟了兩把鎖,就會導致死鎖問題
  • 因為同一時間只能由一個線程打開鎖,然后關閉鎖之后才可以去有另外一個線程去執行鎖
  • 就是一個線程還沒有釋放一個鎖,但是另一個線程已經拿到了其他鎖的鑰匙,導致第一個執行的線程沒辦法拿到下一個鎖的鑰匙,也沒辦法執行完
  • 他和你另一個線程就會處在一個一直等待需要要是開下一把鎖的狀態
from threading import Thread,RLock,Lock import timelock1 = Lock()def foo(name):lock1.acquire()print(f"{name}抱起貓")time.sleep(3) # 模擬線程被中斷去執行其他的線程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,RLock,Lock import timelock1 = RLock()def foo(name):lock1.acquire()print(f"{name}抱起貓")time.sleep(3) # 模擬線程被中斷去執行其他的線程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 # 信息量:也就是廁所開放多少個坑,一次性運行的線程數,之前的加鎖了,一次只有一個線程通過,這次不一樣了,這次好幾個# 實例化一個信息量 sem = Semaphore(4) # 括號里面的數值是開放多少個"坑位"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()

轉載于:https://www.cnblogs.com/xiongchao0823/p/11543737.html

總結

以上是生活随笔為你收集整理的递归锁,死锁,使用递归锁解决死锁,信号量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。