線(xiàn)程安全是什么意思呢?簡(jiǎn)單來(lái)說(shuō)就是當(dāng)一個(gè)程序?qū)σ粋€(gè)線(xiàn)程安全的方法或者語(yǔ)句進(jìn)行訪問(wèn)的時(shí)候,其他人不能再對(duì)其進(jìn)行操作了,必須等到這次訪問(wèn)結(jié)束以后才能對(duì)這個(gè)線(xiàn)程安全的方法進(jìn)行訪問(wèn),本篇文章總結(jié)了Python3中幾種常用的線(xiàn)程鎖,請(qǐng)看下文:
鎖是Python提供給我們能夠自行操控線(xiàn)程切換的權(quán)利,使用鎖可以讓線(xiàn)程的切換變得有序,一旦線(xiàn)程的切換變得有序后,各個(gè)線(xiàn)程之間對(duì)數(shù)據(jù)的訪問(wèn)、修改就變得可控,所以如果要想保證線(xiàn)程安全,就必須使用鎖。
threading模塊中提供了5種最常見(jiàn)的鎖,下面按功能可以這么劃分:
同步鎖:lock(一次只能放行一個(gè));
遞歸鎖:rlock(一次只能放行一個(gè));
條件鎖:condition(一次可以放行任意個(gè));
事件鎖:event(一次全部放行);
信號(hào)量鎖:semaphore(一次可以放行特定個(gè));
1、Lock()同步鎖
有同步鎖和互斥鎖兩種,互斥指在同一時(shí)刻,某一資源僅能有一個(gè)訪問(wèn)者訪問(wèn)其,具有唯一性和排他性,但它無(wú)法限制訪問(wèn)者對(duì)資源的訪問(wèn)數(shù)據(jù),即訪問(wèn)是無(wú)序的;而同步指在互斥的基礎(chǔ)上,通過(guò)其他機(jī)制實(shí)現(xiàn)訪問(wèn)者對(duì)資源的有序訪問(wèn),其實(shí)它是互斥的一種更為復(fù)雜的實(shí)現(xiàn),因?yàn)樗诨コ獾幕A(chǔ)上實(shí)現(xiàn)了有序訪問(wèn)的特點(diǎn)。
2、RLock()遞歸鎖
是同步鎖的一個(gè)升級(jí)版本,在同步鎖的基礎(chǔ)上可以做到連續(xù)重復(fù)使用多次acquire()后再重復(fù)使用多次release()的操作,但一定要注意加鎖次數(shù)和解鎖次數(shù)必須一致,否則容易出現(xiàn)死鎖現(xiàn)象。
3、Condition()條件鎖
條件鎖是在遞歸鎖的基礎(chǔ)上增加了能夠暫停線(xiàn)程運(yùn)行的功能,并且我們可以使用wait()與notify()來(lái)控制線(xiàn)程執(zhí)行的個(gè)數(shù),需要注意的是,條件鎖可以自由設(shè)定一次放行幾個(gè)線(xiàn)程。
4、Event()事件鎖
是基于條件鎖來(lái)做的,它與條件鎖的區(qū)別在于一次只能放行全部,不能放行任意個(gè)數(shù)量的子線(xiàn)程繼續(xù)運(yùn)行,可以將事件鎖看為紅綠燈,當(dāng)紅燈時(shí)所有子線(xiàn)程都暫停運(yùn)行,并進(jìn)入等待狀態(tài),當(dāng)綠燈時(shí)所有子線(xiàn)程都恢復(fù)正常運(yùn)行。
5、Semaphore()信號(hào)量鎖
也是根據(jù)條件鎖來(lái)做的,它與條件鎖和事件鎖的區(qū)別在于:
5.1條件鎖:一次可以放行任意個(gè)處于等待狀態(tài)的線(xiàn)程;
5.2事件鎖:一次可以放行全部處于等待狀態(tài)的線(xiàn)程;
5.3信號(hào)量鎖:通過(guò)規(guī)定,成批的放行特定個(gè)處于上鎖狀態(tài)的線(xiàn)程。
以上內(nèi)容為大家介紹了Python3中最常使用的5種線(xiàn)程鎖,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://www.kei0345678.cn/