6 1 生產者 消費者問題

2021-10-02 03:04:42 字數 1911 閱讀 5197

在多執行緒程式中,執行緒之間通常存在分工。 在一種常見模式中,一些執行緒是生產者,一些是消費者。

需要強制執行幾個同步約束才能使此系統正常工作:

在緩衝區中新增或刪除專案時,緩衝區處於不一致狀態。 因此,執行緒必須具有對緩衝區的獨佔訪問許可權。

如果消費者執行緒在緩衝區為空時到達,則會阻塞,直到生產者新增新專案為止。

初始化

mutex提供對緩衝區的獨佔訪問。 當items為正數時,它表示緩衝區中專案的數量。 如果為負數,則表示佇列中排隊的消費者執行緒數。

訊號量初始化

ossemaphoreid_t sem_mutex;

sem_mutex =

ossemaphorenew(1

,1,null);

ossemaphoreid_t sem_mutex;

sem_items =

ossemaphorenew(1

,0,null

);

事件快取初始化

int event_buffer[

256]=;

int now_events =

0;

事件新增

void

event_add

(int

* event)

事件獲取

void

event_get

(int

* event)

模擬事件等待

void

wait_event()

模擬事件處理

void

event_process

(int event)

生產者執行緒

}消費者執行緒

}結論:

可以看到put與get是成對出現的,生產乙個事件,消費乙個事件;這個前提是在生產者的速度比消費者的速度慢的情況下。

提高生產者的速度:

生產者執行緒修改為:

可以看到消費者會丟事件!

5 12 生產者和消費者

一 生產者和消費者之間的關係 1 生產者將生產出來的資訊不斷存入乙個區域內,消費者將資訊從該區域內不斷讀取出來 生產者錄入資訊 消費者讀取資訊 例 電影票 public class movie public void setname string name public string getinfo...

26 生產者消費者模型

一 ipc 空間復用 中記憶體隔離開了多個程序直接不能直接互動 ipc指的就是程序間通訊 幾種方式 1 建立乙個共享檔案 缺點 效率較低 優點 理論上交換的資料量可以非常大 適用於 互動不頻繁,且資料量較大的情況 2 共享記憶體 缺點 資料量不大 優點 效率高 適用於 互動頻繁,但是資料量小 3 管...

JAVA訓練2 生產者消費者問題

多執行緒經典問題 題目 生產者和消費者問題,類似的火車站賣票問題 總結 在多執行緒中往往會遇到死鎖的問題,利用互斥鎖可以解決該問題,當然還有別的鎖。sleep 方法在thread類裡,鎖定時別的執行緒不可以訪問鎖定物件 wait 方法在object類裡,鎖定時別的執行緒可以訪問鎖定物件。同時wait...