問題思路:如果緩衝區沒有滿則可以生產,如果緩衝區沒有空則可以消費。假設緩衝區大小為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 ...