0716Semaphore 訊號量控制程序同步

2021-08-21 11:53:16 字數 1633 閱讀 2321

from multiprocessing import process , current_process , semaphore

def funca(args):

# args 引數是例項化的semaphoer

# 開啟乙個檔案,寫入內容,在本函式執行的時候其他程序不能執行

# semaphoer例項的acquire()方法,給本程序枷鎖,其他程序不能執行

args.acquire()

fp = open("semaphoer.txt","a")

for x in range(50):

print("我是函式funca |程序名字",current_process().name,"正在寫檔案")

fp.write("aaaaa\n")

fp.close()

# 執行完成後,釋放鎖,其他程序可以執行

args.release()

def funcb(args):

# args 引數是例項化的semaphoer

# 開啟乙個檔案,寫入內容,在本函式執行的時候其他程序不能執行

# semaphoer例項的acquire()方法,給本程序枷鎖,其他程序不能執行

args.acquire()

fp = open("semaphoer.txt","a")

for x in range(50):

print("我是函式funcb |程序名字",current_process().name,"正在寫檔案")

fp.write("bbbbb\n")

fp.close()

# 執行完成後,釋放鎖,其他程序可以執行

args.release()

def funcc(args):

# args 引數是例項化的semaphoer

# 開啟乙個檔案,寫入內容,在本函式執行的時候其他程序不能執行

# semaphoer例項的acquire()方法,給本程序枷鎖,其他程序不能執行

args.acquire()

fp = open("semaphoer.txt","a")

for x in range(50):

print("我是函式funca |程序名字",current_process().name,"正在寫檔案")

fp.write("ccccc\n")

fp.close()

# 執行完成後,釋放鎖,其他程序可以執行

args.release()

def main():

args = semaphore(2)

pa = process(target=funca,name="a程序",args=(args,))

pb = process(target=funcb,name="b程序",args=(args,))

pc = process(target=funcc,name="c程序",args=(args,))

pa.start()

pb.start()

pc.start()

pa.join()

pb.join()

pc.join()

if __name__ == '__main__':

main()

訊號量semaphore解析

1 基礎概念 訊號量在建立時須要設定乙個初始值,表示同一時候能夠有幾個任務能夠訪問該訊號量保護的共享資源。初始值為1就變成相互排斥鎖 mutex 即同一時候僅僅能有乙個任務能夠訪問訊號量保護的共享資源。乙個任務要想訪問共享資源,首先必須得到訊號量,獲取訊號量的操作將把訊號量的值減1。若當前訊號量的值...

Semaphore初識 java訊號量

朋友在寫 活動的時候,為了控制線程,用到了semaphore類 之前也是沒有用到過,就簡單認識一下它。semaphore,是負責協調各個執行緒,以保證它們能夠正確 合理的使用公共資源。也是作業系統中用於控制程序同步互斥的量。或者說,簡單的來講,就 是訊號量。比如我們去網咖開機子上網 原諒樓主是個網癮...

訊號量Semaphore學習總結

訊號量 semaphore 有時被稱為訊號燈,是在多執行緒環境下使用的一種設施,是可以用來保證兩個或多個關鍵 段不被併發呼叫。在進入乙個關鍵 段之前,執行緒必須獲取乙個訊號量 一旦該關鍵 段完成了,那麼該執行緒必須釋放訊號量。其它想進入該關鍵 段的執行緒必須等待直到第乙個執行緒釋放訊號量。為了完成這...