c實現生產者消費者原始碼

來源:互聯網
上載者:User
特註:運行該程式需要設定VC6.0環境
Project->Setting->C/C++->Category->Code Generation->Using Run-time library->Debug MultiThreaded
#include <iostream>#include <list>#include <windows.h>#include <process.h>using namespace std;#define P(sem) WaitForSingleObject(sem,INFINITE)#define V(sem) ReleaseSemaphore(sem,1,NULL)class CQueue{public:    void addTail();//往隊列尾部增加一個元素    void removeHead();//讀出並移除隊列的第一個元素private:    list<int> L;};CQueue buffer;//全域的緩衝區const int buf_size = 10;//緩衝區大小static int GOODS_ID = 0;//商品序號const int producers = 3;//生產者數量const int consumers = 8;//消費者數量void ProducerThread(void* param);void ConsumerThread(void* param);HANDLE empty,occupy,op_mutex;int main(){    int i;    int p_id[producers],c_id[consumers];    occupy = CreateSemaphore(NULL,0,buf_size,NULL);//佔用位置    empty = CreateSemaphore(NULL,buf_size,buf_size,NULL);//空餘位置    op_mutex = CreateSemaphore(NULL,1,1,NULL);//操作互斥量    for(i=0;i<producers;++i)    {        p_id[i] = i+1;        _beginthread(ProducerThread,0,p_id+i);    }    for(i=0;i<consumers;++i)    {        c_id[i] = i+1;        _beginthread(ConsumerThread,0,c_id+i);    }    while(getchar()=='\n') break;    return 0;}void CQueue::addTail(){    L.insert(L.end(),++GOODS_ID);}void CQueue::removeHead(){    cout<<*L.begin()<<endl;    L.erase(L.begin());}void ProducerThread(void* param){    int id = *(int*)param;    while(1)    {        P(empty);        P(op_mutex);        Sleep(100);        buffer.addTail();        printf("Producer_%d produced %d\n",id,GOODS_ID);        V(op_mutex);        V(occupy);    }}void ConsumerThread(void* param){    int id = *(int*)param;    while(1)    {        P(occupy);        P(op_mutex);        Sleep(100);        printf("Consumer_%d consumed ",id);        buffer.removeHead();        V(op_mutex);        V(empty);    }}

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.