資源簡介
1。生產者消費者問題(信號量+mutex)
參考教材中的生產者消費者算法,創建5個進程,其中兩個進程為生產者進程,3個進程為消費者進程。一個生產者進程試圖不斷地在一個緩沖中寫入大寫字母,另一個生產者進程試圖不斷地在緩沖中寫入小寫字母。3個消費者不斷地從緩沖中讀取一個字符并輸出。為了使得程序的輸出易于看到結果,仿照閱讀材料中的實例程序,分別在生產者和消費者進程的合適的位置加入一些隨機睡眠時間。
可選的實驗:在上面實驗的基礎上實現部分消費者有選擇地消費某些產品。例如一個消費者只消費小寫字符,一個消費者只消費大寫字母,而另一個消費者則無選擇地消費任何產品。消費者要消費的產品沒有時,消費者進程被阻塞。注意緩沖的管理。
2。用信號量和mutex方式實現睡覺的理發師問題
3。讀者寫者問題
教材和相關的閱讀材料中對讀者寫者問題算法均有描述,但這個算法在不斷地有讀者流的情況下,寫者會被阻塞。編寫一個寫者優先解決讀者寫者問題的程序,其中讀者和寫者均是多個進程,用信號量作為同步互斥機制。

代碼片段和文件信息
#include
#include
#include
#include
#define?nSize?5
int?main(int?argcchar?*?argv[])
{
//printf(“%s\n“argv[1]);
int?id;
if(strcmp(argv[1]“0“)==0)
id=0;
else?if(strcmp(argv[1]“1“)==0)?id=1;
else?id=2;
printf(“Consumer?%d?is?working...\n“id);
//Sleep(rand()%100);
HANDLE?hofempty=OpenSemaphore(SEMAPHORE_ALL_ACCESSTRUE“empty“);
if(hofempty?==?false?)
{
printf(“Consumer?%d?open?empty?failed...\n“id);
exit(1);
}
HANDLE?hoffull=OpenSemaphore(SEMAPHORE_ALL_ACCESSTRUE“full“);
if(hoffull?==?false?)
{
printf(“Consumer?%d?open?full?failed...\n“id);
exit(1);
}
HANDLE?hofmutex=OpenMutex(MUTEX_ALL_ACCESSTRUE“mutex“);
if(hofmutex?==?false?)
{
printf(“Consumer?%d?open?mutex?failed...\n“id);
exit(1);
}
while(1)
{
HANDLE?hbuffer=OpenFileMapping(FILE_MAP_ALL_ACCESS?FALSE“Buffer“);
if(hbuffer?==?NULL?)
{
printf(“Consumer?%d?Open?Buffer?failed...\n“id);
}
char*?buffer=(char?*)MapViewOfFile(hbufferFILE_MAP_ALL_ACCESS00nSize*sizeof(char));
HANDLE?hiter?=?OpenFileMapping(FILE_MAP_ALL_ACCESS?FALSE“Iter“);
if(hiter?==?NULL?)
{
printf(“Consumer?%d?Open?Iter?failed...\n“id);
}
UINT?*?iter=(UINT?*)MapViewOfFile(hiterFILE_MAP_ALL_ACCESS00sizeof(UINT));
printf(“Consumer?%d?is?applying?for?a?char...\n“id);
WaitForSingleobject(hoffullINFINITE);
Sleep(rand()%2000);
printf(“Consumer?%d?is?trying?to?enter?buffer\n“id);
WaitForSingleobject(hofmutexINFINITE);
Sleep(rand()%2000);
printf(“Consumer?%d?has?entered?the?buffer?and?is?working...\n“id);
printf(“Consumer?%d?has?got?a?char????????......????]?%c?[%d?\n“idbuffer[*iter]*iter);
*iter?-=1;
Sleep(rand()%2000);
UnmapViewOfFile(hiter);
UnmapViewOfFile(hbuffer);
printf(“Consumer?%d?is?leaving?the?Buffer...\n“id);
ReleaseSemaphore(hofempty1NULL);
ReleaseMutex(hofmutex);
}
return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????735580??2009-11-07?20:31??_1p&c\consumer\bin\Debug\consumer.exe
?????目錄??????????0??2009-11-07?20:31??_1p&c\consumer\bin\Debug
?????目錄??????????0??2009-11-05?11:18??_1p&c\consumer\bin
?????文件???????1030??2009-11-05?12:47??_1p&c\consumer\consumer.cbp
?????文件???????1986??2009-11-07?18:58??_1p&c\consumer\consumer.cpp
?????文件????????166??2009-11-09?00:48??_1p&c\consumer\consumer.depend
?????文件????????246??2009-11-09?01:12??_1p&c\consumer\consumer.layout
?????文件?????718172??2009-11-07?20:31??_1p&c\consumer\obj\Debug\consumer.o
?????目錄??????????0??2009-11-07?20:31??_1p&c\consumer\obj\Debug
?????目錄??????????0??2009-11-05?11:18??_1p&c\consumer\obj
?????目錄??????????0??2009-11-09?01:12??_1p&c\consumer
?????文件?????733577??2009-11-09?00:48??_1p&c\pc_problem\bin\Debug\pc_problem.exe
?????目錄??????????0??2009-11-09?00:48??_1p&c\pc_problem\bin\Debug
?????目錄??????????0??2009-11-05?00:58??_1p&c\pc_problem\bin
?????文件?????717528??2009-11-09?00:48??_1p&c\pc_problem\obj\Debug\pc_problem.o
?????目錄??????????0??2009-11-09?00:48??_1p&c\pc_problem\obj\Debug
?????目錄??????????0??2009-11-04?21:33??_1p&c\pc_problem\obj
?????文件???????1038??2009-11-05?01:09??_1p&c\pc_problem\pc_problem.cbp
?????文件???????2464??2009-11-05?15:56??_1p&c\pc_problem\pc_problem.cpp
?????文件????????144??2009-11-05?15:58??_1p&c\pc_problem\pc_problem.depend
?????文件????????246??2009-11-09?01:12??_1p&c\pc_problem\pc_problem.layout
?????目錄??????????0??2009-11-09?01:12??_1p&c\pc_problem
?????文件?????734044??2009-11-05?15:52??_1p&c\producer\bin\Debug\producer.exe
?????目錄??????????0??2009-11-05?15:52??_1p&c\producer\bin\Debug
?????目錄??????????0??2009-11-04?20:03??_1p&c\producer\bin
?????文件?????717102??2009-11-05?15:52??_1p&c\producer\obj\Debug\producer.o
?????目錄??????????0??2009-11-05?15:52??_1p&c\producer\obj\Debug
?????目錄??????????0??2009-11-04?20:03??_1p&c\producer\obj
?????文件???????1030??2009-11-05?01:09??_1p&c\producer\producer.cbp
?????文件???????2097??2009-11-05?15:52??_1p&c\producer\producer.cpp
............此處省略54個文件信息
- 上一篇:拼圖的好代碼
- 下一篇:pl2303驅動比較舊的版本2007
評論
共有 條評論