POSIX下的訊號量(生產者 消費者模型)

2021-07-31 05:08:32 字數 1091 閱讀 2724

system v下的訊號量主要用於程序間通訊,也可以用於執行緒(不推薦)

posix下的訊號量主要用於執行緒間通訊,也可以用於程序(不推薦)

本篇主要研究posix下的訊號量

訊號量變數的型別為sem_t。主要介面:

訊號量的建立:

int sem_init(sem_t *sem, int pshared, unsigned int value);

引數1:sem訊號量位址

引數2:pshared引數為0,表示訊號量用於同一程序的執行緒間; pshared引數不為0,表示訊號量用於程序間。

引數3:value引數表示可用資源的數量

訊號量的申請:

int sem_wait(sem_t *sem) //阻塞式(p操作)

int sem_trywait(sem_t *sem) //非阻塞式(p操作)

使訊號量的值減1,如果呼叫sem_wait()時,訊號量的值已經是0,則掛起等待。若不想掛起等待則可非阻塞式申請資源即呼叫sem_trywait()。

訊號量的釋放:

int sem_post(sem_t *sem) //(v操作)

使semaphore 的值加1,同時喚醒掛起等待的執行緒。

生產者消費者模型為例(交易場所使用環形佇列):

POSIX訊號量 生產者消費者模型

今天我們來寫乙個基於固定大小的環形佇列的生產者消費者模型。首先來畫圖說明一下 這是乙個環形佇列的生產者消費者模型。生產者用p表示,消費者用c表示。這個環形佇列的每一段空間我們用semblank表示,放入的內容我們用semdata表示。生產者首先要申請乙個semblank,然後放入semdata。消費...

生產者消費者模型 基於Posix訊號量和互斥量

這種方式可以用訊號量初值來定義倉庫大小,迴圈生產和消費 生產者 while 1 消費者 while 1 實現 include include include include include define pro count 3 define com count 3 define bufsize 5 ...

Linux訊號量機制(生產者消費者)

該程式為linux訊號量機制實現程式,主要模擬了一般的生產者 消費者問題。生產者 消費者問題是乙個經典的程序同步問題,該問題最早由dijkstra提出,用以演示他提出的訊號量機制。在同乙個程序位址空間內執行的兩個執行緒。生產者執行緒生產物品,然後將物品放置在乙個空緩衝區中供消費者執行緒消費。消費者執...