Linux系統訊號量實現生產者 消費者問題

2021-10-05 20:57:23 字數 1608 閱讀 7459

#include

#include

#include

#include

using

namespace std;

const

int buffer_size =

1024

;const

int wait_time =10;

sem_t empty;

sem_t full;

pthread_mutex_t mtx = pthread_mutex_initializer;

int buffer[buffer_size]

;int front =

0, rear =0;

void

*producer

(void

*arg)

return

(void*)

0;}void

*consumer

(void

*arg)

return

(void*)

0;}int

main

(int argc,

char

const

* ar**)

if(pthread_create

(&consumertid,

null

, consumer,

null))

pthread_join

(producertid,

null);

pthread_join

(consumertid,

null);

sem_destroy

(&full)

;sem_destroy

(&empty)

;while

(true);

return0;

}

producer produce product 77

consumer consume product 77

producer produce product 35

consumer consume product 35

producer produce product 49

consumer consume product 49

producer produce product 27

producer produce product 59

設定緩衝區大小為10,生產者每隔隨機時間生產1個產品放入緩衝區,消費者每隔隨機時間從緩衝區取出乙個產品消費,只有緩衝區不為空消費者才能消費,只有緩衝區不為滿,生產者才能生產產品放入緩衝區,若緩衝區為空且消費者欲消費產品則消費者需等待,若緩衝區為滿且生產者欲放入產品則生產者需等待,同時需要設定乙個訊號量使得生產者消費者執行緒能互斥訪問緩衝區

訊號量物件指標

訊號量型別,0為程序內線程間共享,否則為程序間共享

訊號量初始值

int sem_wait(sem_t * sem);

訊號量物件指標

int sem_post(sem_t *sem);

訊號量物件指標

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

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

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

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

linux程式設計 通過訊號量實現生產者與消費者模型

訊號量 用於實現同步與互斥。本質 就是乙個計數器,對資源進行計數以及提供乙個pcb等待佇列,向外提供p v操作介面,實現同步與互斥 p操作 在臨界資源訪問之前進行p操作,計數 1,對計數進行判斷,小於0則不符合訪問條件,使執行緒阻塞或報錯返回,否則正確返回獲取資源 v操作 在生產資源之後,進行v操作...