生產者消費者問題

2021-07-04 22:28:48 字數 2075 閱讀 1427

問題思路:如果緩衝區沒有滿則可以生產,如果緩衝區沒有空則可以消費。假設緩衝區大小為buf_size,則生產者生產生產了就通知消費者可取數量+1,消費者消費量則可取數量-1;

解決方法:訊號量,定義

handle g_semaphoreproducer;

//初始可用數量buf_size,因為一開始沒有生產

//最大可用數量buf_size

handle g_semaphorecustomer;

//初始可用數量0,因為一開始沒有生產

//最大可用數量buf_size

生產線程:

if(waitforsingleobject(g_semaphoreproducer,inifinite) == wait_object_0))

消費執行緒

if(waitforsingleobject(g_semaphorecustomer,inifinite) == wait_object_0))

//此時消費生產者完成

///下面給出乙個生產者乙個消費者**

// multithread.cpp : 定義控制台應用程式的入口點。

//

// multithread.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include

#include

#include

#include

using namespace std;

const

int max_size = 10;///> 最大產品數量

const

int buf_size = 4;///> 緩衝區大小

const

int procedure_size = 1;///> 生產者數量

const

int custom_size = 1;///> 消費者數量

handle g_hprocedure = invalid_handle_value;

handle g_hcustomer = invalid_handle_value;

int g_putindex = 0;

int g_getindex = 0;

critical_section g_cs;

int g_buffer[buf_size] = ;

bool setconsolecolor(word wattributes)

void putproduct(int nval)

unsigned

int __stdcall procedure(void* lparam)

}return0;}

unsigned

int __stdcall customer(void * lparam)

releasesemaphore(g_hprocedure,1,null);}}

return0;}

int _tmain(int argc, _tchar* argv)

; initializecriticalsection(&g_cs);

g_hprocedure = createsemaphore(null,buf_size,buf_size,null);

g_hcustomer = createsemaphore(null,0,buf_size,null);

for (int i = 0;i < procedure_size;++i)

for (int i = procedure_size;i < procedure_size+custom_size;++i)

waitformultipleobjects(procedure_size+custom_size,h,true,infinite);

for (int i = 0;i < procedure_size+custom_size;++i)

deletecriticalsection(&g_cs);

closehandle(g_hcustomer);

closehandle(g_hprocedure);

return

0;}

生產者消費者問題

public class producer consumer class godown public godown int num public synchronized void produce int n catch interruptedexception e curr num n syste...

生產者 消費者問題

在學習程序互斥中,有個著名的問題 生產者 消費者問題。這個問題是乙個標準的 著名的同時性程式設計問題的集合 乙個有限緩衝區和兩類執行緒,它們是生產者和消費者,生產者把產品放入緩衝區,相反消費者便是從緩衝區中拿走產品。生產者在緩衝區滿時必須等待,直到緩衝區有空間才繼續生產。消費者在緩衝區空時必 須等待...

生產者 消費者問題

1 程序互斥問題 緩衝區b是臨界資源,程序p和c不能同時對b進行操作,即只能互斥的操作 2 程序同步問題 p不能往 滿 的的緩衝區b放產品,c不能從空的緩衝區獲得產品。當緩衝區滿時,c必須先於p執行,當緩衝區空時,p必須先於c執行 我們給出如下基於記錄型 二元 訊號量機制的解法 10 9 2013 ...