python—多线程数据混乱问题解决之同步锁
一、同步
問(wèn)題產(chǎn)生的原因就是沒(méi)有控制多個(gè)線程對(duì)同一資源的訪問(wèn),對(duì)數(shù)據(jù)造成破壞,使得線程運(yùn)行的結(jié)果不可預(yù)期。這種現(xiàn)象稱為"線程不安全”"。
同步:就是協(xié)同步調(diào),按預(yù)定的先后次序進(jìn)行運(yùn)行。如:你說(shuō)完,我再說(shuō)。如進(jìn)程、線程同步,可理解為進(jìn)程或線程A和B一塊配合,A執(zhí)行到一定程度時(shí)要依靠B的某個(gè)結(jié)果,于是停下來(lái),示意B運(yùn)行;B依言執(zhí)行,再將結(jié)果給A;A再繼續(xù)操作。這既是同步,
二、同步鎖
1、lock=Lock():創(chuàng)建同步鎖
2、lock.acquire():獲得這把鎖的鑰匙
3、lock.release():釋放鎖;如果不釋放鎖,其他的線程拿不到鎖,是不會(huì)運(yùn)行的,釋放鎖后其他線程會(huì)搶這把鎖。誰(shuí)先獲得這把鎖呢?不一定
4、加鎖還可以使用with,效果一樣
5、必須使用同一把鎖
執(zhí)行結(jié)果:數(shù)據(jù)很大,沒(méi)有出現(xiàn)數(shù)據(jù)混亂問(wèn)題
如果使用鎖,程序會(huì)變成串行,因此應(yīng)該是在適當(dāng)?shù)牡胤郊渔i;線程調(diào)度本質(zhì)上是不確定的,因此,在多線程程序中錯(cuò)誤地使用鎖機(jī)制可能會(huì)導(dǎo)致隨機(jī)數(shù)據(jù)損壞或者其他的異常行為,我們稱之為競(jìng)爭(zhēng)條件。為了避免競(jìng)爭(zhēng)條件,最好只在臨界區(qū)(對(duì)臨界資源進(jìn)行操作的那部分代碼)使用鎖,
三、線程局部變量不會(huì)造成數(shù)據(jù)混亂問(wèn)題
執(zhí)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的python—多线程数据混乱问题解决之同步锁的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python—多线程之共享数据
- 下一篇: python—多线程之死锁