兩情侶之間容易形成什麼鎖?進來瞧瞧

文章目錄

互斥鎖

進程之間數據隔離,但是共享一套文件系統,因而可以通過文件來實現進程直接的通信,但問題是必須自己加鎖處理。
注意:加鎖的目的是爲了保證多個進程修改同一塊數據時,同一時間只能有一個修改,即串行的修改,沒錯,速度是慢了,犧牲了速度而保證了數據安全
那麼也就是說當多個線程幾乎同時修改一個共享數據的時候,需要進行同步控制,線程同步能夠保證多個 線程安全的訪問競爭資源(全局內容),最簡單的同步機制就是使用互斥鎖。 某個線程要更改共享數據時,先將其鎖定,此時資源的狀態爲鎖定狀態,其他線程就能更 改,直到該線程將資源狀態改爲非鎖定狀態,也就是釋放資源,其他的線程才能再次鎖定資 源。互斥鎖保證了每一次只有一個線程進入寫入操作。從而保證了多線程下數據的安全性。

死鎖

我獻給大家介紹一些死鎖:在多個線程共享資源的時候,如果兩個線程分別佔有一部分資源,並且同時等待對方的資 源,就會造成死鎖現象。
我給大家舉一個比較搞笑的例子
兩情侶之間吵得不可開交你不讓我我不讓你,那麼要是雙方都不開口,那麼雙方是不是就是一直等待着
那我帶大家來看一下死鎖是怎樣的結構:

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()

行了,概念代碼也都介紹了,小的就告退啦,祝大家每天開開心心,嘻嘻嘻

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章