日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Python中的鎖對(duì)象——可重入鎖

如果您嘗試運(yùn)行下面提供的代碼,鎖對(duì)象將在第一次調(diào)用acquire()方法時(shí)獲得鎖,但第二次不會(huì)。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),玉溪企業(yè)網(wǎng)站建設(shè),玉溪品牌網(wǎng)站建設(shè),網(wǎng)站定制,玉溪網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,玉溪網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

為什么會(huì)這樣?因?yàn)檎5逆i對(duì)象一旦被獲取就不能被重新獲取,即使相同的線程試圖這樣做。

但是為什么會(huì)有人嘗試兩次調(diào)用acquire()方法呢?讓我們舉一個(gè)簡(jiǎn)單的例子來(lái)演示這個(gè)簡(jiǎn)單的鎖定問(wèn)題:

lock = threading.Lock()

def get_first_line():
    lock.acquire()
    try:
        # read some file and get the first line
    finally:
        lock.release()
    return data

def get_second_line():
    lock.acquire()
    try:
        # read the same file and get the second line
    finally:
        lock.release()
    return data

在上面的代碼中,我們有兩個(gè)不同的函數(shù)從共享資源中讀取不同部分的數(shù)據(jù)。我們使用了鎖定機(jī)制來(lái)防止任何其他線程在我們的線程讀取文件時(shí)修改文件的數(shù)據(jù)。

現(xiàn)在考慮您想要逐個(gè)調(diào)用這兩個(gè)函數(shù),您將這樣做:

first = get_first_line()
second = get_second_line()

return first, second 

但是這個(gè)調(diào)用仍然不是線程安全的,因?yàn)楫?dāng)您從共享資源中讀取數(shù)據(jù)時(shí),在兩個(gè)函數(shù)調(diào)用之間可以有任何其他線程可以修改共享資源的內(nèi)容。

為了避免這種情況,我們可以獲取一個(gè)鎖,然后調(diào)用這兩個(gè)函數(shù):

lock.acquire()

try:
    first = get_first_line()
    second = get_second_line()
finally:
    lock.release()
return first, second 

但是,這段代碼不會(huì)起作用,因?yàn)槲覀儗⒃谕痪€程內(nèi)的鎖對(duì)象上調(diào)用acquire(),試圖在調(diào)用函數(shù)之前已經(jīng)獲取的函數(shù)內(nèi)再次獲取鎖。

因此,在這種情況下,不能使用基本的鎖對(duì)象。對(duì)于這樣的情況我們有RLock類。


對(duì)象:Python 多線程

RLock 代表可重入鎖。同一個(gè)線程可以多次獲取可重入鎖。

RLock 對(duì)象也有兩個(gè)可以調(diào)用的方法,它們是:

  1. acquire()方法
  2. release()方法

這里有一個(gè)簡(jiǎn)單的例子來(lái)演示RLock對(duì)象的工作:

如果我們使用RLock對(duì)象,那么簡(jiǎn)單的鎖定問(wèn)題示例中的代碼也將毫無(wú)問(wèn)題地工作:

lock = threading.RLock()

lock.acquire()

try:
    first = get_first_line()
    second = get_second_line()
finally:
    lock.release()
return first, second 

上面的代碼可以正常工作。




分享題目:Python中的鎖對(duì)象——可重入鎖
本文鏈接:http://www.5511xx.com/article/cdohjsd.html