資源簡介
操作系統中的經典進程同步問題。利用信號量機制來解決生產者-消費者問題。

代碼片段和文件信息
#include????
#include?
#include?“d_random.h“????????????????//產生隨機數用
using?namespace?std;
//#define?MAX_THREAD_NUM?64????????????//最大線程數目
//int?count?=?0;???????????????????????//統計線程總數
HANDLE?h_Mutex;??????????????????????//用于線程間的互斥???
HANDLE?bufferFullSemaphore;??????????//當緩沖區滿時生產者等待信號量??
HANDLE?bufferEmptySemaphore;?????????//當緩沖區空時消費者等待信號量??????????????????????????????
const?int?BUFFER_SIZE?=?2;???????????//緩沖區長度
long?buffer[BUFFER_SIZE]?=?{0};????????//緩沖區循環隊列
int?in?=?0;??????????????????????????//用與追蹤產品進緩沖區時的緩沖區數組下標
int?out?=?0;????????????????????????//用與追蹤產品出緩沖區時的緩沖區數組下標
randomNumber?rndNum;?????????????????//用于產生隨機數(模擬產品)
long?rn;
const?int?PRODUCER_NUM=?3;?????//生產者的個數???
const?int?CONSUMER_NUM?=?4;?????//消費者的個數
DWORD?producerID[PRODUCER_NUM];???//生產者線程的標識符???
DWORD?consumerID[CONSUMER_NUM];???//消費者線程的標識符
bool?control?=?true;??????????????//控制生產者消費者線程的循環???
void?producer1(void)?????//生產者1進程
{???
while(control){
//count++;
WaitForSingleobject(bufferFullSemaphoreINFINITE);?
????????WaitForSingleobject(h_MutexINFINITE);
rn?=?rndNum.random(10000)?+?90000;
????????cout?<“Producter1?is?producing!Product?“?<
rn?<“?is?producted!“?< buffer[in]?=?rn;???//產品進緩沖區
in?=?(in?+?1)?%?BUFFER_SIZE;???//循環緩沖區指向下一個儲存空間
cout?<“The?product?in?buffer?now?are(0表示沒有產品):“?< for(int?i?=?0;i? {
cout?<“buffer“?< if(buffer[i]?==?0)
cout?<“???????<--可生產于此“;???
????????????else???
cout?<“???-->此產品可消費“;???
????????????????cout?< }
cout?<????????Sleep(1000);???
????????ReleaseMutex(h_Mutex);???
????????ReleaseSemaphore(bufferEmptySemaphore1NULL);???
}?????
}
void?producer2(void)?????//生產者2進程
{???
while(control){
//count++;
WaitForSingleobject(bufferFullSemaphoreINFINITE);???
????????WaitForSingleobject(h_MutexINFINITE);
rn?=?rndNum.random(10000)?+?90000;
????????cout?<“Producter2?is?producing!Product?“?<
rn?<“?is?producted!“?< buffer[in]?=?rn;???//產品進緩沖區
in?=?(in?+?1)?%?BUFFER_SIZE;???//循環緩沖區指向下一個儲存空間
cout?<“The?product?in?buffer?now?are(0表示沒有產品):“?< for(int?i?=?0;i? {
cout?<“buffer“?< if(buffer[i]?==?0)
cout?<“???????<--可生產于此“;???
????????????else???
cout?<“???-->此產品可消費“;???
????????????????cout?< }
cout?<????????Sleep(2000);???
????????ReleaseMutex(h_Mutex);???
????????ReleaseSemaphore(bufferEmptySemaphore1NULL);???
}?????
}???
void?producer3(void)?????//生產者3進程
{???
while(control){
//count++;
WaitForSingleobject(bufferFullSemaphoreINFINITE);???
????????WaitForSingleobject(h_MutexINFINITE);
rn?=?rndNum.random(10000)?+?90000;
????????cout?<“Producter3?is?producing!Product?“?<
rn?<“?is?produc
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3543??2008-11-02?16:11??生產者與消費者\界面\ReadMe.txt
?????文件????????906??2008-11-03?16:15??生產者與消費者\界面\Resource.h
?????文件???????1610??2008-11-23?00:05??生產者與消費者\界面\scxf.clw
?????文件???????2035??2008-11-02?16:11??生產者與消費者\界面\scxf.cpp
?????文件???????4528??2008-11-03?16:42??生產者與消費者\界面\scxf.dsp
?????文件????????514??2008-11-02?16:11??生產者與消費者\界面\scxf.dsw
?????文件???????1302??2008-11-02?16:11??生產者與消費者\界面\scxf.h
?????文件??????91136??2008-11-23?00:06??生產者與消費者\界面\scxf.ncb
?????文件???????1416??2008-11-23?00:05??生產者與消費者\界面\scxf.plg
?????文件???????1343??2008-11-03?16:45??生產者與消費者\界面\scxfDlg.h
?????文件????????206??2008-11-02?16:11??生產者與消費者\界面\StdAfx.cpp
?????文件???????1054??2008-11-02?16:11??生產者與消費者\界面\StdAfx.h
?????文件???????5038??2008-11-10?16:13??生產者與消費者\界面\scxfDlg.cpp
?????文件???????6772??2008-11-10?16:42??生產者與消費者\界面\scxf.rc
?????文件??????33316??2008-11-11?17:16??生產者與消費者\界面\scxf.aps
?????文件??????49664??2008-11-23?00:06??生產者與消費者\界面\scxf.opt
?????文件???????2358??2008-11-03?16:16??生產者與消費者\界面\res\bitmap1.bmp
?????文件???????2358??2008-11-03?15:58??生產者與消費者\界面\res\bitmap2.bmp
?????文件???????2358??2008-11-03?16:16??生產者與消費者\界面\res\bitmap3.bmp
?????文件???????1270??2008-11-03?16:08??生產者與消費者\界面\res\bitmap4.bmp
?????文件???????1270??2008-11-03?16:10??生產者與消費者\界面\res\bitmap5.bmp
?????文件???????1270??2008-11-03?16:15??生產者與消費者\界面\res\bitmap6.bmp
?????文件???????1078??2008-11-02?16:11??生產者與消費者\界面\res\scxf.ico
?????文件????????396??2008-11-02?16:11??生產者與消費者\界面\res\scxf.rc2
?????文件?????122949??2008-11-23?00:05??生產者與消費者\界面\Debug\scxf.exe
?????文件?????345088??2008-11-23?00:05??生產者與消費者\界面\Debug\scxf.pdb
?????文件??????14100??2008-11-10?16:43??生產者與消費者\界面\Debug\scxf.res
?????文件?????364544??2008-11-23?00:05??生產者與消費者\界面\Debug\vc60.pdb
?????文件?????197632??2008-11-23?00:05??生產者與消費者\界面\Debug\vc60.idb
?????文件????5496080??2008-11-23?00:05??生產者與消費者\界面\Debug\scxf.pch
............此處省略27個文件信息
- 上一篇:影視后期 AE工程 源文件
- 下一篇:安卓音樂播放器源碼
評論
共有 條評論