国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

詳解Python中的Lock和Rlock

瀏覽:3日期:2022-06-29 10:14:39

線程是進(jìn)程中可以調(diào)度執(zhí)行的實(shí)體。而且,它是操作系統(tǒng)中可以執(zhí)行的最小處理單元。簡單地說,一個(gè)線程就是一個(gè)程序中可以獨(dú)立于其他代碼執(zhí)行的指令序列。為了簡單起見,你可以假設(shè)線程只是進(jìn)程的子集!

Locks

鎖是Python中用于同步的最簡單的方式。鎖有兩種狀態(tài):上鎖、釋放鎖。

鎖是線程模塊中的一個(gè)類,有兩個(gè)主要方法:acquire()和release() 當(dāng)調(diào)用acquire()方法時(shí),它鎖定鎖的執(zhí)行并阻塞鎖的執(zhí)行,直到其他線程調(diào)用release()方法將其設(shè)置為解鎖狀態(tài)。鎖幫助我們有效地訪問程序中的共享資源,以防止數(shù)據(jù)損壞,它遵循互斥,因?yàn)橐淮沃荒苡幸粋€(gè)線程訪問特定的資源。

讓我們看看下面的例子來理解鎖的使用:

import threading #創(chuàng)建一個(gè)lock對(duì)象lock = threading.Lock() #初始化共享資源abce = 0 def sumOne(): global abce #鎖定共享資源 lock.acquire() abce = abce + 1 #釋放共享資源 lock.release() def sumTwo(): global abce #鎖定共享資源 lock.acquire() abce = abce + 2 #釋放共享資源 lock.release() #調(diào)用函數(shù) sumOne()sumTwo()print(abce)

在上面的程序中,lock是一個(gè)鎖對(duì)象,全局變量abce是一個(gè)共享資源,sumOne()和sumTwo()函數(shù)扮作兩個(gè)線程,在sumOne()函數(shù)中共享資源abce首先被鎖定,然后增加了1,然后abce被釋放。sumTwo()函數(shù)執(zhí)行類似操作。 兩個(gè)函數(shù)sumOne()和sumTwo()不能同時(shí)訪問共享資源abce,一次只能一個(gè)訪問共享資源。

RLocks

默認(rèn)的lock不能識(shí)別lock當(dāng)前被哪個(gè)線程持有。如果任何線程正在訪問共享資源,那么試圖訪問共享資源的其他線程將被阻塞,即使鎖定共享資源的線程也是如此。 在這些情況下,可重入鎖(或RLock)用于防止訪問共享資源時(shí)出現(xiàn)不必要的阻塞。如果共享資源在RLock中,那么可以安全地再次調(diào)用它。 RLocked資源可以被不同的線程重復(fù)訪問,即使它在被不同的線程調(diào)用時(shí)仍然可以正常工作。

讓我們看看下面的例子來理解RLocks的使用:

import threading #創(chuàng)建一個(gè)lock對(duì)象lock = threading.Lock() #初始化共享資源abce = 0 #本線程訪問共享資源lock.acquire()abce = abce + 1 #這個(gè)線程訪問共享資源會(huì)被阻塞lock.acquire()abce = abce + 2lock.release() print(abce)

在上面的程序中,兩個(gè)線程同時(shí)嘗試訪問共享資源abce,這里當(dāng)一個(gè)線程當(dāng)前正在訪問共享資源abce時(shí),另一個(gè)線程將被阻止訪問它。 當(dāng)兩個(gè)或多個(gè)線程試圖訪問相同的資源時(shí),有效地阻止了彼此訪問該資源,這就是所謂的死鎖,因此上述程序沒有生成任何輸出。

但是,在程序中上述問題可以通過使用RLock來解決。

import threading #創(chuàng)建一個(gè)rlock對(duì)象lock = threading.RLock() #初始化共享資源abce = 0 #本線程訪問共享資源lock.acquire()abce = abce + 1 #這個(gè)線程嘗試訪問共享資源lock.acquire()abce = abce + 2lock.release() print(abce)

在這里,沒有阻止程序中的線程訪問共享資源abce。 對(duì)于RLock對(duì)象鎖的每個(gè)acquire(),我們需要調(diào)用release()一次。

從上面提到的眾多程序和解釋中,在Python中一個(gè)Lock對(duì)象和一個(gè)RLock對(duì)象有很多區(qū)別:

locks rlocks lock對(duì)象無法再被其他線程獲取,除非持有線程釋放 rlock對(duì)象可以被其他線程多次獲取 lock對(duì)象可被任何線程釋放 rlock對(duì)象只能被持有的線程釋放 lock對(duì)象不可以被任何線程擁有 rlock對(duì)象可以被多個(gè)線程擁有 對(duì)一個(gè)對(duì)象鎖定是很快的 對(duì)一個(gè)對(duì)象加rlock比加lock慢

以上就是詳解Python中的Lock和Rlock的詳細(xì)內(nèi)容,更多關(guān)于Python中Lock和Rlock的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 一级欧美毛片成人 | 中国国语毛片免费观看视频 | 国产日韩欧美在线一二三四 | 国产三级在线视频播放线 | 91精品免费国产高清在线 | 久久一日本道色综合久 | 国内自拍偷拍视频 | 日韩久久网 | 伊人狠狠丁香婷婷综合色 | 欧美视频一 | 欧美成人精品第一区 | 九九免费视频 | 久久性生大片免费观看性 | 国产精品成人一区二区不卡 | 成在线人视频免费视频 | 成人精品视频网站 | 久久91精品国产91久久户 | 欧美日韩顶级毛片www免费看 | 久久久综合久久 | 久久久国产成人精品 | 欧美成人免费观看久久 | 亚洲精品视频网 | 欧美国产成人精品一区二区三区 | 久草在线免费色站 | 国产午夜精品理论片久久影视 | 欧美yyy | 女bbbbxxxx毛片视频0 | 国产精品久久久久网站 | 99久久精品国产片 | 成人免费视频软件网站 | 久久久久久久99精品免费 | 久草免费在线视频 | 亚洲丝袜另类 | 国产一二三区视频 | 欧美美女一区二区三区 | 中国一级毛片录像 | 久久福利青草狠狠午夜 | 欧美毛片a级毛片免费观 | 成人午夜影院 | 大伊香蕉精品视频在线观看 | 久久aⅴ免费观看 |