Python使用條件變數保持執行緒同步

2021-07-05 02:17:43 字數 1512 閱讀 5467

__author__ = 'll_ying'

'''生產者消費者模型:生產者必須等到佇列有空間踩可以繼續投放商品,如果空間已滿,則需要等待消費者消耗商品。

生產者必須在等待時間內釋放佇列的佔有權,然後消費者才能消耗了商品通知生產者佇列有空間。

'''importthreading

con = threading.condition()

classproducer(threading.thread):

def__init__(self

, threadname):

threading.thread.__init__(self

, name=threadname)

defrun(self):

globalx

con.acquire()

ifx == 1000000:

con.wait()

passelse:

foriinrange(1000000):

x = x + 1

con.notify()

print(x)

con.release()

classconsumer(threading.thread):

def__init__(self

, threadingname):

threading.thread.__init__(self

, name=threadingname)

defrun(self):

globalx

con.acquire()

ifx == 0:

con.wait()

passelse:

foriinrange(1000000):

x = x - 1

print(x)

con.release()

x = 0

p = producer('producer')

c = consumer('consumer')

p.start()

c.start()

p.join()

c.join()

print(x)

'''wait()等待掛起

notify()喚起另外乙個執行緒

執行緒在acquire和release之間保證同一時間允許乙個執行緒修改資料

'''

boost條件變數使用

條件變數和互斥變數都是boost庫中被封裝的類。條件變數是thread庫提供的一種等待執行緒同步的機制,可實現執行緒間的通訊,它必須與互斥量配合使用,等待另乙個執行緒中某個事件發生後本執行緒才能繼續執行。互斥量是一種用於多執行緒程式設計的手段,它可以在多執行緒程式設計中防止多個執行緒同時操作共享資源...

條件變數pthread cond t使用示例

示例 cpp view plain copy include include include pthread mutex t mutex pthread mutex initializer 初始化互斥鎖 pthread cond t cond pthread cond initializer 初始化...

Linux條件變數的使用

linux執行緒同步之間存在多種機制,條件變數是一種類似作業系統裡提到的生產者 消費者演算法的同步機制,允許執行緒以無競爭的方式等待特定條件的發生。示例偽 void thread1 void void thread2 void 條件變數需要配合互斥量一起使用,互斥量作為引數傳入wait函式,函式把呼...