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的值自...