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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python入门学习笔记13(线程锁与信号量)

發布時間:2025/4/14 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python入门学习笔记13(线程锁与信号量) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鎖的作用是在多個線程訪問同一個資源時對資源進行保護,防止多線程操作造成結果不解預測

1.互斥鎖

import threadingnum = 0mutex = threading.Lock();def cal(i):#上鎖mutex.acquire()global numnum += i#解鎖mutex.release()lst = [] for i in range(5):t = threading.Thread(target=cal,args=(i,))lst.append(t)t.start()for t in lst:t.join() print(num)

2.可重入鎖

可重入鎖是用來解決循環加鎖造成的死鎖問題。

互斥鎖連續上鎖兩次以上便會陷入死鎖狀態,如果要使用同一把鎖進行多次鎖操作,必須使用可重入鎖RLock。

RLock中維護了一個Lock對象和一個counter,counter中記錄了鎖acquire的次數,使得可以對鎖進行多次的acquire操作。

只有在所有的acquire被release之后,其他線程才能夠獲得資源。

#如果使用了Lock便會死鎖 # mutex = threading.Lock(); mutex = threading.RLock();num = 0def plus():mutex.acquire()print("plus lock")global numnum += 1mutex.release()print("plus release")def mimus():mutex.acquire()print("mimus lock")global numnum -= 1mutex.release()print("mimus release")def run():mutex.acquire()plus()print("-----------")mimus()mutex.release()for i in range(5):t = threading.Thread(target=run)t.start()

3.信號量

互斥鎖同時允許一個線程訪問資源,而信號量同時允許一組線程訪問資源。

連接池就是信號量的運用。

import threading import time #一個最大為5的信號量 semaphore = threading.BoundedSemaphore(5)def func(i):semaphore.acquire()print("member%d訪問" %i)time.sleep(i)semaphore.release()for i in range(20):t= threading.Thread(target = func,args = (i,))t.start()

從運行結果可以看出,持續會維持在同時最多只有5個線程可以進行訪問,當有信號量release了才會用新的進程遞補

?

轉載于:https://www.cnblogs.com/Hexdecimal/p/9407559.html

總結

以上是生活随笔為你收集整理的Python入门学习笔记13(线程锁与信号量)的全部內容,希望文章能夠幫你解決所遇到的問題。

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