import threading
#條件變數, 用於複雜的執行緒間同步
# class xiaoai(threading.thread):
# def __init__(self, lock):
# super().__init__(name="小愛")
# self.lock = lock
## def run(self):
# self.lock.acquire()
# print("{} : 在 ".format(self.name))
# self.lock.release()
## self.lock.acquire()
# print("{} : 好啊 ".format(self.name))
# self.lock.release()
## class tianmao(threading.thread):
# def __init__(self, lock):
# super().__init__(name="天貓精靈")
# self.lock = lock
## def run(self):
## self.lock.acquire()
# print("{} : 小愛同學 ".format(self.name))
# self.lock.release()
## self.lock.acquire()
# print("{} : 我們來對古詩吧 ".format(self.name))
# self.lock.release()
#通過condition完成協同讀詩
class xiaoai(threading.thread):
def __init__(self, cond):
super().__init__(name="小愛")
self.cond = cond
def run(self):
with self.cond:
self.cond.wait()
print("{} : 在 ".format(self.name))
self.cond.notify()
self.cond.wait()
print("{} : 好啊 ".format(self.name))
self.cond.notify()
self.cond.wait()
print("{} : 君住長江尾 ".format(self.name))
self.cond.notify()
self.cond.wait()
print("{} : 共飲長江水 ".format(self.name))
self.cond.notify()
self.cond.wait()
print("{} : 此恨何時已 ".format(self.name))
self.cond.notify()
self.cond.wait()
print("{} : 定不負相思意 ".format(self.name))
self.cond.notify()
class tianmao(threading.thread):
def __init__(self, cond):
super().__init__(name="天貓精靈")
self.cond = cond
def run(self):
with self.cond:
print("{} : 小愛同學 ".format(self.name))
self.cond.notify()
self.cond.wait()
print("{} : 我們來對古詩吧 ".format(self.name))
self.cond.notify()
self.cond.wait()
print("{} : 我住長江頭 ".format(self.name))
self.cond.notify()
self.cond.wait()
print("{} : 日日思君不見君 ".format(self.name))
self.cond.notify()
self.cond.wait()
print("{} : 此水幾時休 ".format(self.name))
self.cond.notify()
self.cond.wait()
print("{} : 只願君心似我心 ".format(self.name))
self.cond.notify()
self.cond.wait()
if __name__ == "__main__":
from concurrent import futures
cond = threading.condition()
xiaoai = xiaoai(cond)
tianmao = tianmao(cond)
#啟動順序很重要 有wait的要先啟動
#在呼叫with cond之後才能呼叫wait或者notify方法
xiaoai.start()
tianmao.start()
執行緒間通訊 同步
同步 是指多個任務按照約定的先後次序 相互配合完成一件事情 訊號量 由訊號量決定 執行緒是繼續執行 還是阻塞等待 訊號量代表某種資源 其值表示系統中該資源的數量 訊號量是乙個受保護的量 只能通過特定的三種操作來訪問 初始化p操作 申請資源,有可能阻塞 v操作 釋放資源,不會阻塞 p s 操作 if ...
程序間通訊 和 執行緒間同步
前經常搞混,所以記錄下來。程序間通訊主要是指多個程序間的資料互動。而執行緒間同步主要指維護多個執行緒之間資料準確 一致性。一.程序間通訊主要有以下幾種方式 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 ...
程序間通訊 執行緒同步 概要
關鍵區域。訪問的資源。叫臨界資源,比方印表機。訪問臨界資源的 叫臨界 區域。critical section物件沒有控制代碼,不能被其它執行緒共享。執行緒同步之 critical section 相互排斥量。mutex物件有控制代碼。所以也可用於不同程序的執行緒之間做同步。mutex有超時等待機制。...