併發程式設計四(4) 執行緒同步 Condition

2022-10-10 13:39:10 字數 1733 閱讀 5059

import threading

import time

def consumer(cond):

with cond:

print("consumer before wait")

cond.wait() # 等待消費(相當於程序就緒狀態)

print("consumer after wait")

def producer(cond):

with cond:

print("producer before notifyall")

# cond.notify_all() # 通知所有等待cond的消費者可以消費了

cond.notify() # 喚醒乙個等待cond的消費者

print("producer after notifyall")

if __name__ == '__main__':

condition = threading.condition()

t1 = threading.thread(name = "thread-1", target = consumer, args=(condition,))

t2 = threading.thread(name = "thread-2", target = consumer, args=(condition,))

t3 = threading.thread(name = "thread-3", target = producer, args=(condition,))

t1.start()

time.sleep(2)

t2.start()

time.sleep(2)

t3.start()

import threading

import time

def consumer(cond):

with cond:

print("consumer before wait")

cond.wait() # 等待消費(相當於程序就緒狀態)

print("consumer after wait")

def producer(cond):

with cond:

print("producer before notifyall")

# cond.notify_all() # 通知所有等待cond的消費者可以消費了

cond.notify() # 喚醒乙個等待cond的消費者

print("producer after notifyall")

if __name__ == '__main__':

condition = threading.condition()

t1 = threading.thread(name = "thread-1", target = consumer, args=(condition,))

t2 = threading.thread(name = "thread-2", target = consumer, args=(condition,))

t3 = threading.thread(name = "thread-3", target = producer, args=(condition,))

t1.start()

time.sleep(2)

t2.start()

time.sleep(2)

t3.start()

併發程式設計(4)同步併發操作

一 主要涉及 等待事件 帶有期望的等待一次性事件 在限定時間內等待 使用同步操作簡化 二 等待乙個條件或者事件 1 選擇是在等待執行緒在檢查間隙,使用 std this thread sleep for 進行週期性的間歇 2 也是優先的選擇 是,使用c 標準庫提供的工具去等待事件的發生。通過另一線程...

java併發程式設計 執行緒同步

sysynchronized關鍵字可以修飾方法 塊,但不能修飾構造器 成員變數等。當sysynchronized關鍵字同來修飾方法和 塊時,能夠保證同一時刻最多只有乙個執行緒執行該段 或方法。防止當有兩個執行緒併發修改同乙個檔案時可能會造成異常。同步 塊語法 synchronized obj 複製 ...

併發程式設計 多執行緒(實現同步)二

當多個執行緒同時共享,同乙個全域性變數或靜態變數,做寫的操作時,可能會發生資料衝突問題,也就是執行緒安全問題。但是做讀操作是不會發生資料衝突問題。使用多執行緒之前的同步或者使用鎖 lock 原理 將可能傳送資料衝突問題,只能讓當前乙個執行緒進行。執行完成後釋放鎖,然後讓其它執行緒執行。執行緒之前同步...