資源簡介
操作系統(tǒng)中的經(jīng)典進(jìn)程同步問題。利用信號量機(jī)制來解決生產(chǎn)者-消費(fèi)者問題。

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