1.程序之間的資料不能共享,但是共享同一套檔案系統,所以訪問同乙個檔案,或者同乙個列印終端,是沒有問題的,而共享帶來的是競爭競爭帶來是錯亂
2.如何控制,就是加鎖處理,而互斥鎖就是互相排斥,假設把多個程序比喻成多個人,互斥鎖的工作原理是多個人都要去爭搶同乙個資源:比如搶乙個房間,誰先搶到這個資源就暫時先占為己有然後上個鎖,然後在他占用的時間段內別人是要等他用完
hreading模組中定義了lock類,可以方便的處理鎖定:
1.建立鎖
mutex = threading.lock()
2.鎖定
mutex.acquire([timeout])
3.釋放
mutex.release()
其中,鎖定方法acquire可以有乙個超時時間的可選引數timeout。如果設定了timeout,則在超時後通過返回值可以判斷是否得到了鎖,從而可以進行一些其他的處理。
使用互斥鎖實現上面的例子的**如下:
from multiprocessing import process,lock
import time,random
#互斥鎖:必須是lock.acquire()一次,然後lock.release()釋放一次,才能繼續lock.acquire()
#互斥鎖和join區別
#大前提:二者的原理都是一樣的,都是將併發變成序列,從而保證有序
#區別:join是按照認為指定的順序執行,而互斥鎖是所有的程序平等的競爭,誰先搶到誰執行
mutex=lock()
#兩個執行緒都在搶著對這個鎖進行上鎖,如果有一方成功上鎖,那麼導致另外一方會堵塞(一直等待),到這個鎖被解開為之
thnum=0
class mythread(threading.thread):
def run(self):
mutex.acquire()
for i in range(10000):
global thnum
thnum+=1
print(thnum)
mutex.release()
def test():
global thnum
mutex.acquire() #等待可以上鎖,通知而不是輪訓,沒有占用cpu
for i in range(10000):
thnum+=1
print(thnum)
mutex.release()#解鎖
在多道程式系統中,由於多個程序的併發執行,改善了系統資源的利用率並提高了系統的處理能力。然而,多個程序的併發執行也帶來了新的問題——死鎖。所謂死鎖是指多個程序因競爭資源而造成的一種僵局,若無外力作用,這些程序都將無法向前推進。
**示意
from threading import thread,lock
import time
mutexa=lock()
mutexb=lock()
class mythread(thread):
def run(self):
self.func1()
self.func2()
def func1(self):
mutexa.acquire()
print('\033[41m%s 拿到a鎖\033[0m' %self.name)
mutexb.acquire()
print('\033[42m%s 拿到b鎖\033[0m' %self.name)
mutexb.release()
mutexa.release()
def func2(self):
mutexb.acquire()
print('\033[43m%s 拿到b鎖\033[0m' %self.name)
time.sleep(2)
mutexa.acquire()
print('\033[44m%s 拿到a鎖\033[0m' %self.name)
mutexa.release()
mutexb.release()
if __name__ == '__main__':
for i in range(5):
t=mythread()
t.start()
python互斥鎖和死鎖
同步就是協同步調,按預定的先後次序進行執行。如 你說完,我再說。同 字從字面上容易理解為一起動作 其實不是,同 字應是指協同 協助 互相配合。如程序 執行緒同步,可理解為程序或執行緒a和b一塊配合,a執行到一定程度時要依靠b的某個結果,於是停下來,示意b執行 b執行,再將結果給a a再繼續操作。解決...
python 互斥鎖,死鎖
同步與非同步之間的區別 1.同步 可以理解為執行緒a和b一塊配合工作,a執行到一定程度時要依靠b的某個結 果,於是停下來示意b執行,b執行完將結果給a,然後a繼續執行。2.非同步 非同步是指程序不需要一直等待下去,而是繼續執行下面的操作,不管其他程序的狀態,當有資訊返回的時候會通知程序進行處理,這樣...
Python互斥鎖 死鎖
死鎖當多個執行緒幾乎同時修改某乙個共享資料的時候,需要進行同步控制。執行緒同步能夠保證多個執行緒安全訪問競爭資源,最簡單的同步機制是引入互斥鎖。互斥鎖為資源引入乙個狀態 鎖定 非鎖定 某個執行緒要更改共享資料時,先將其鎖定,此時資源的狀態為 鎖定 其他執行緒不能更改 直到該執行緒釋放資源,將資源的狀...