生產者消費者多緩衝區實現

2021-06-28 04:51:06 字數 1806 閱讀 3869

#include#include#includeint gbuffer=0;//全域性變數,緩衝區

handle g_eventbufferempty,g_eventbufferfull;

const int end_produce_number=10;

//生產者執行緒

dword producerthread(pvoid pm)

return 0;

}//消費者執行緒

dword consumerthread(pvoid pm)

return 0;

}int main()

; dword produceid;

dword consumerid;

hthread[0]=::createthread(null,0,(lpthread_start_routine)producerthread,null,0,&produceid);

hthread[1]=::createthread(null,0,(lpthread_start_routine)consumerthread,null,0,&consumerid);

::waitformultipleobjects(2,hthread,true,infinite);

closehandle(hthread[0]);

closehandle(hthread[1]);

closehandle(g_eventbufferempty);

closehandle(g_eventbufferfull);

}

ps:在但緩衝區的環境下,我們只需要兩個互斥變數,乙個用來通知消費者消費geventbufferfull,乙個用於通知生產者生產geventbufferempty,這樣我們就可以實現了,而在多緩衝區的環境下使用互斥變數則有寫捉襟見肘,而是需要使用可以計數的訊號量來進行緩衝區的作用**如下:

//如果有兩個緩衝區多個生產者,多個消費者呢?

#include#include#include#includeusing namespace std;

const int end_produce_number=8;

const int buffer_size=4;

int g_i=0,g_j=0;

int gbuffer[buffer_size]=;

//設定訊號量和關鍵段

critical_section g_cs;

handle g_semphbufferempty=0,g_semphbufferfull=0;

int mm[4]=;

int a=0;

//生產者執行緒

dword produce(pvoid pm)

{ for(int i=1;i<=end_produce_number;i++)

{ ::waitforsingleobject(g_semphbufferempty,infinite);

//互斥訪問的**段

::entercriticalsection(&g_cs);

if(mm[g_i]!=1)

{ gbuffer[g_i]=i;

cout<<"生產者執行緒放入第"<

思路:主要就是最大值是4的訊號量,我們根據這個訊號量進行緩衝區的設定除了4個緩衝區gbuffer[4]以外還有乙個對著4個緩衝區標誌的索引mm[4],如果第i個緩衝區已經被使用那麼mm[i]就為1,如果消費者對第j個緩衝區進行了消費,那麼mm[j]=0;

每次生產者對緩衝區操作的時候需要檢測mm相對應位置上的值是不是0,每次消費者對緩衝區讀取的時候需要檢測mm對應的值是不是1,這樣我們就完成了生產者消費者的執行緒模型

使用阻塞緩衝區的生產者消費者

repository 重點在於repertory類的實現,該類提供阻塞的addproduct和getproduct,來達到生產者與消費者之間的協調。public class repertory catch interruptedexception e else public synchronized...

生產者與消費者模型 有界緩衝區

問題描述 生產者消費者問題 英語 producer consumer problem 也稱有限緩衝問題 英語 bounded buffer problem 是乙個多程序 同步問題的經典案例。該問題描述了共享固定大小緩衝區的兩個程序 即所謂的 生產者 和 消費者 在實際執行時會發生的問題。生產者的主要...

非同步之生產者消費者模型 同步緩衝區的實現

適用於多個生產線程和多個消費執行緒之間的協作,生產者將資訊放入同步緩衝區,消費者從該緩衝區中讀取進行操作,可以指定特殊的 產品 來指示工作執行緒退出。ifndef producer consumer hpp define producer consumer hpp include class non...