python多執行緒資料同步安全問題(兩種解決方案)

2021-09-20 13:05:04 字數 1258 閱讀 3238

import threading

#如果多個執行緒同時訪問同乙個資源,就會造成執行緒得不安全

money = 0

#定義乙個函式用於存錢

def addmoney():

global money

for i in range(1000000):

money+=1

print(money)

#執行緒衝突情況

def conflict():

#有五個執行緒,這五個執行緒同時取用同乙個資源

for _ in range(5):

t = threading.thread(target=addmoney)

t.start()

pass

#執行緒衝突解決方案

#一,執行緒同步

def threadsync():

for _ in range(5):

t = threading.thread(target=addmoney)

t.start()

t.join()#將執行緒加入同步佇列中,同步既是多個執行緒在同步佇列中依次執行,序列

#同步會造成執行緒堵塞

#方案二,給資源加鎖

lock = threading.lock()#互斥鎖

def addmoney2():

global money

print('當前執行緒為',threading.current_thread().name)

# 給公共資源處理過程加鎖

# if lock.acquire():

#     for i in range(1000000):

#         money+=1

#     print(money)

# #釋放

# lock.release()

with lock:

for i in range(1000000):

money+=1

print(money)

print('執行緒',threading.current_thread().name)

def threadlock():

for _ in range(5):

t = threading.thread(target=addmoney2)

t.start()

if __name__ == '__main__':

# conflict()

# threadsync()

threadlock()

Python多執行緒同步

1 實現檔案讀寫的檔案ltz schedule times.py usr bin env python coding utf 8 import os def readtimes res if os.path.exists schedule times.txt fp open schedule tim...

python 多執行緒5執行緒同步

互斥鎖是最簡單的執行緒同步機制,python提供的condition物件提供了對複雜執行緒同步問題的支援。condition被稱為條件變數,除了提供與lock類似的acquire和release方法外,還提供了wait和notify方法。執行緒首先acquire乙個條件變數,然後判斷一些條件。如果條...

Python 多執行緒3 同步執行緒

現在假設這樣乙個例子 有乙個全域性的計數num,每個執行緒獲取這個全域性的計數,根據num進行一些處理,然後將num加1。很容易寫出這樣的 encoding utf 8 import threading import time class mythread threading.thread def ...