資料枷鎖安全

2021-09-17 19:35:42 字數 1266 閱讀 5660

"""

執行緒共享資源也就是說共享全域性資源,執行緒又是併發執行,因此當多個執行緒對同乙個記憶體進行更改(寫)操作時,會發生混亂

num = 0

執行緒1 獲取num =0

執行緒2 獲取num =0

執行緒1 num+=1 num = 1

執行緒1 num+=1 num = 2

執行緒1 num+=1 num = 3

執行緒2 num+=1 num = 1

即執行緒2獲取的資料並不是3,因此發生家操作後並不是想要的結果

使用鎖,每當資料進行更改,對該資料枷鎖;執行完功能後,釋放鎖

鎖可以是全域性的,這樣所有的入口函式都可以使用

多執行緒同時訪問的全域性資料才會發生混亂

必須呼叫 global 才能訪問全域性變數

"""import threading

# 宣告全域性變數

num = 0

# 全域性範圍內宣告乙個鎖例項

loa = threading.lock()

def funa():

"""使用同乙個鎖的第乙個入口函式"""

for i in range(1000000):

# 引用全域性變數

global num

# 鎖定資料

loa.acquire()

# 寫(更改)操作

num += 1

# 釋放資源

loa.release()

def funb():

"""使用同乙個鎖的第二個入口函式"""

for i in range(1000000):

# 引用全域性變數

global num

# 鎖定資料

loa.acquire()

# 寫(更改)操作

num += 1

# 釋放資源

loa.release()

def main():

# 新建多個執行緒

t1 = threading.thread(target=funa)

t2 = threading.thread(target=funb)

# 開啟執行緒

t1.start()

t2.start()

# 阻塞主線程,防止子執行緒隨主線程結束

t1.join()

t2.join()

# 測試全域性變數

print(num)

if __name__ == '__main__':

main()

打破創新枷鎖

我們可以經常看到國外的很多研發工程師可以將自己的想法做成產業,真正實現了 知識改變命運 的人生理想。但是,在國內我們很難做到這一點,這到底是為什麼呢?很多人在思考這個問題的時候,潛意識不假思索的回答 這是制度導致的,國內的制度沒有國外的制度好。不可否認,這是正確的,國內的企業創新環境沒有矽谷好,初創...

思維的枷鎖

思維的枷鎖 repeat 0 match data option repeat 0 title count 票 percent 有一天,我在鄉下看到有位老農把一頭大水牛栓在乙個小小的木樁上,我就走上前,對老農說 大伯,它會跑掉的。老農呵呵一笑,語氣十分肯定地說 它不會跑掉的。我有些迷惑,忍不住又問 ...

iOS NSThread多執行緒枷鎖

隱式建立 inte ce nsobject nsthreadperformadditions 給nsobject拓展了分類方法 方便程式設計師可以很方便的呼叫跟執行緒相關的方法 void threaddemo3 類方法建立 void threaddemo2 物件方法建立 void threaddem...