多執行緒同步 鎖的概念

2022-08-22 23:48:08 字數 663 閱讀 7397

import time

import threading

num = 0 #定義乙個全域性變數

tolock = threading.lock() # 建立一把鎖

class mythread(threading.thread): #繼承threading模組的thread方法

def run(self): #對父類重寫

global num #聲名修改全域性變數

aa=tolock.acquire() # 進行上鎖

print('執行緒(%s)的鎖狀態為%d'%(self.name,aa))

if aa: #判斷上鎖是否成功

num=num+1 #全域性變數+1

time.sleep(1)

msg = self.name+'set num to '+str(num)

print(msg)

tolock.release() #釋放鎖

def myt():

for i in range(5):

t=mythread() #建立例項

t.start() # 開啟執行緒

if __name__ == '__main__':

myt() #呼叫函式

多執行緒同步概念

不管是多執行緒還是多程序,涉及到共享相同的記憶體時,需要確保好同步問題。對執行緒來說,需要確保每個執行緒看到一致的資料檢視。如果每個執行緒使用的變數都是其他執行緒不會讀取和修改的,那麼就不存在一致性問題,同樣的,如果變數是唯讀的,多個執行緒同時讀取該變數也不會有一致性問題。但是如果其中的某個執行緒去...

執行緒同步 多執行緒自旋鎖

短時間鎖定的情況下,自旋鎖 spinlock 更快。因為自旋鎖本質上不會讓執行緒休眠,而是一直迴圈嘗試對資源訪問,直到可用。所以自旋鎖線程被阻塞時,不進行執行緒上下文切換,而是空轉等待。對於多核cpu而言,減少了切換執行緒上下文的開銷,從而提高了效能。class program spinlock是n...

多執行緒同步與鎖

多執行緒同步與鎖 本次主要討論的是lock,autoeventset,moniter 如下 上圖為執行緒1,2執行write1,被阻塞,直到執行緒4發出訊號,執行緒1,2收到訊號後取得執行權的執行緒可以執行 改下main 上圖為執行緒3,5執行write2,執行緒4執行wirte4,首先取得lock...