互斥鎖
進程之間數據隔離,但是共享一套文件系統,因而可以通過文件來實現進程直接的通信,但問題是必須自己加鎖處理。
注意:加鎖的目的是爲了保證多個進程修改同一塊數據時,同一時間只能有一個修改,即串行的修改,沒錯,速度是慢了,犧牲了速度而保證了數據安全
那麼也就是說當多個線程幾乎同時修改一個共享數據的時候,需要進行同步控制,線程同步能夠保證多個 線程安全的訪問競爭資源(全局內容),最簡單的同步機制就是使用互斥鎖。 某個線程要更改共享數據時,先將其鎖定,此時資源的狀態爲鎖定狀態,其他線程就能更 改,直到該線程將資源狀態改爲非鎖定狀態,也就是釋放資源,其他的線程才能再次鎖定資 源。互斥鎖保證了每一次只有一個線程進入寫入操作。從而保證了多線程下數據的安全性。
死鎖
我獻給大家介紹一些死鎖:在多個線程共享資源的時候,如果兩個線程分別佔有一部分資源,並且同時等待對方的資 源,就會造成死鎖現象。
我給大家舉一個比較搞笑的例子
兩情侶之間吵得不可開交你不讓我我不讓你,那麼要是雙方都不開口,那麼雙方是不是就是一直等待着
那我帶大家來看一下死鎖是怎樣的結構:
from threading import Lock
from threading import Thread
lock1=Lock()
lock2=Lock()
def work1(num):
lock1.acquire()#lock1上鎖
print("in work1")
lock2.acquire()#lock2上鎖
print("work1---")
lock2.release()#lock2解鎖
lock1.release()#lock1解鎖
def work2(num):
lock2.acquire()#lock2加鎖
print("in work")
lock2.acquire()#lock2加鎖
print("work---")
lock1.release()#lock1解鎖
lock1.release()#lock2解鎖
if __name__ == '__main__':
t1=Thread(target=work1,args=(1000000,))
t2=Thread(target=work2,args=(1000000,))
t1.start()
t2.start()
行了,概念代碼也都介紹了,小的就告退啦,祝大家每天開開心心,嘻嘻嘻