執行緒同步鎖

2022-09-11 12:33:18 字數 1006 閱讀 7643

#同步鎖

對於兩個函式a,b,建立兩條執行緒,並且讓其睡眠,流程上看似輪流執行,其實不是,因為涉及到cpu切換去執行問題。

import threading

import time

def a():

for i in range(3):

print("a:"+str(i))

time.sleep(0.01)

def b():

for i in range(3):

print("b:"+str(i))

time.sleep(0.01)

a=threading.thread(target=a)

b=threading.thread(target=b)

a.start()

b.start()

#輸出結果:

a:0b:0

b:1a:1

b:2 a:2

但是如果想讓a先執行完畢再去執行b,則使用到同步鎖

import threading

import time

r=threading.lock() #建立鎖

def a():

r.acquire() #獲取鎖

for i in range(3):

print("a:"+str(i))

time.sleep(0.01)

r.release() #釋放鎖

def b():

r.acquire()

for i in range(3):

print("b:"+str(i))

time.sleep(0.01)

r.release()

a=threading.thread(target=a)

b=threading.thread(target=b)

a.start()

b.start()

輸出結果:

a:0a:1

a:2b:0

b:1b:2

執行緒同步 互斥鎖

一 為什麼要用多執行緒?避免阻塞 乙個程序如果只有乙個執行緒的話,當這個乙個執行緒阻塞則就整個程序阻塞,無法再去完成其他事情。提高效率,避免cpu空 程式經常涉及讀寫操作就會訪問磁碟,這些操作的速度比cpu慢的多,而為了等待這些操作的響應,cpu又不能去幹其他的事情或者處理新的請求,導致這種單執行緒...

執行緒同步與鎖

二元訊號量和多元訊號量,是乙個變數,獲取 1,釋放 1,當變數處於 0的情形下才可以被獲取。乙個執行緒的獲取可以用另乙個執行緒來釋放。很像二元訊號量,但是釋放只能是本執行緒。臨界區是比互斥量更加嚴格的同步手段,訊號量和互斥量可以不同程序之間操作,也就是說 乙個程序建立了乙個互斥量或訊號量,另乙個程序...

執行緒同步與鎖

為了避免多個執行緒對同乙個資料進行讀寫,我們要將各個執行緒進行同步。所謂同步,就是指在乙個執行緒訪問資料未結束的時候,其他執行緒不得對同一資料進行訪問。同步最常用的方法是鎖。是最簡單的一種鎖,只有兩種狀態 占用和非占用。她適合只能被唯一乙個執行緒獨佔訪問的資源。允許多個執行緒併發訪問的資源適合使用訊...