python之互斥鎖

2022-01-16 17:43:45 字數 2770 閱讀 8601

from threading import thread,lock

import os,time

#互斥鎖

def work():

global n

lock.acquire() # 鎖住n,讓他依次執行

temp = n

print(n)

time.sleep(0.1)

n=temp-1

print(n)

lock.release() #釋放鎖

if __name__ == '__main__':

lock=lock()

n = 100

l =

for i in range(100):

p=thread(target=work)

p.start()

for p in l:

p.join()

import threading

import time

# 遞迴鎖

#rlcok類的用法和lock類一模一樣,但它支援巢狀,在多個鎖沒有釋放的時候一般會使用rlcok類。

def fun(lock):

global gl_num

lock.acquire()

gl_num += 1

time.sleep(1)

print(gl_num)

lock.release()

if __name__ == '__main__':

gl_num = 0

lock = threading.rlock()

for i in range(10):

t = threading.thread(target=fun,args=(lock,))

t.start()

import threading

import time

#訊號量(boundedsenaohore類)

def run(n, semaphore):

semaphore.acquire() #加鎖

time.sleep(1)

print("run the thread:%s\n" %n)

semaphore.release() #釋放鎖

if __name__ == '__main__':

num = 0

semaphore = threading.boundedsemaphore(5) #最多允許5個執行緒同時執行

for i in range(22):

#print(i)

t = threading.thread(target=run,args=("t-%s" % i, semaphore))

t.start()

while threading.active_count() !=1:

print("while",threading.active_count())

else:

print('-----all threads done----')

import threading

import time

"""事件(event類)

python執行緒的事件用於主線程控制其他執行緒的執行,事件是乙個簡單的執行緒同步物件,其主要提供以下幾個方法:

clear 將flag設定為「false」

set 將flag設定為「true」

is_set 判斷是否設定了flag

wait 會一直監聽flag,如果沒有檢測到flag就一直處於阻塞狀態

事件處理的機制:全域性定義了乙個「flag」,當flag值為「false」,那麼event.wait()就會阻塞,當flag值為「true」,那麼event.wait()便不再阻塞。

"""#利用event類模擬紅綠燈

event = threading.event()

def lighter():

count = 0

event.set() #初始值為綠燈

while true:

if 5 < count <= 10:

event.clear() #紅燈,清除標誌位

print("\33[41;1mred light is on..\033[0m")

elif count > 10:

event.set() #

count = 0

else:

print("\33[42;1mgreen light is on...\033[0m")

time.sleep(1)

count += 1

def car(name):

while true:

if event.is_set(): #判斷是否設定了標誌位

print("[%s] running..."%name)

time.sleep(1)

else:

print("[%s] sees red light,waiting...."%name)

event.wait()

print("[%s] green light is on,start going... "%name)

light = threading.thread(target=lighter)

light.start()

car = threading.thread(target=car,args=("mini",))

car.start()

Python3之互斥鎖

由於併發狀態下,作業系統對多個程序進行排程,而多個程序可能都有操作硬體的需求,這時就會產生多個程序對資源的共享,而共享意味著競爭,會產生許多問題。這樣就需要一種機制或者手段去解決競爭,使競爭變得有序化,從而使共享資源按照預定的結果去獲取。這種手段就是加互斥鎖 import json import o...

程序鎖(互斥鎖)(Python)

3 搶票示例 import json import time from multiprocessing import process,lock defsearch i with open ticket encoding utf 8 as f ticket json.load f print s 當前...

openmp之互斥鎖

openmp中有一些同步機制可以避免執行緒競爭問題的發生。可以使用同步機制,使得執行緒只有執行到某個語句,才能繼續執行後面的程式。在程式需要訪問可能產生競爭的記憶體資料的時候,都需要插入相應的臨界區 乙個例子是定積分確定求圓周率pi的值 函式介面只需要確定區間0 1之間的分段數,段數越多,pi的值自...