日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/4/14 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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(线程锁与信号量)的全部內容,希望文章能夠幫你解決所遇到的問題。

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