python 執行緒間同步通訊condition鎖

2021-08-28 04:14:35 字數 2782 閱讀 8374

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有超時等待機制。...