資源簡介
1。生產(chǎn)者消費者問題(信號量+mutex)
參考教材中的生產(chǎn)者消費者算法,創(chuàng)建5個進程,其中兩個進程為生產(chǎn)者進程,3個進程為消費者進程。一個生產(chǎn)者進程試圖不斷地在一個緩沖中寫入大寫字母,另一個生產(chǎn)者進程試圖不斷地在緩沖中寫入小寫字母。3個消費者不斷地從緩沖中讀取一個字符并輸出。為了使得程序的輸出易于看到結(jié)果,仿照閱讀材料中的實例程序,分別在生產(chǎn)者和消費者進程的合適的位置加入一些隨機睡眠時間。
可選的實驗:在上面實驗的基礎(chǔ)上實現(xiàn)部分消費者有選擇地消費某些產(chǎn)品。例如一個消費者只消費小寫字符,一個消費者只消費大寫字母,而另一個消費者則無選擇地消費任何產(chǎn)品。消費者要消費的產(chǎn)品沒有時,消費者進程被阻塞。注意緩沖的管理。
2。用信號量和mutex方式實現(xiàn)睡覺的理發(fā)師問題
3。讀者寫者問題
教材和相關(guān)的閱讀材料中對讀者寫者問題算法均有描述,但這個算法在不斷地有讀者流的情況下,寫者會被阻塞。編寫一個寫者優(yōu)先解決讀者寫者問題的程序,其中讀者和寫者均是多個進程,用信號量作為同步互斥機制。
代碼片段和文件信息
#include?“stdio.h“
#include?“windows.h“
#define?CHAIRS?5
#define?MAX_DELAY_BARBER?100
#define?MAX_DELAY_HAIRCUT?100
#define?MAX_DELAY_WAIT?400
HANDLE??customers?barbers?mutex?h_barber?h_haircut;
int?????waiting?=?0;
DWORD?WINAPI?barber(PVOID?pvParam)
{
while?(1)
{
WaitForSingleobject(customers?INFINITE);
WaitForSingleobject(mutex?INFINITE);
waiting--;
ReleaseSemaphore(barbers?1?NULL);
ReleaseSemaphore(mutex?1?NULL);
printf(“理發(fā)師在幫顧客理發(fā),還有%d位顧客在等待\n“?waiting);
int?time_haircut;
time_haircut?=?rand()%MAX_DELAY_HAIRCUT;
Sleep(time_haircut);
}
return?0;
}
DWORD?WINAPI?haircut(PVOID?pvParam)
{
while?(1)
{
WaitForSingleobject(mutex?INFINITE);
if?(waiting? {
waiting++;
printf(“顧客增加\n“);
int?customer_wait;
customer_wait?=?rand()%MAX_DELAY_WAIT;
Sleep(customer_wait);
????????????ReleaseSemaphore(customers?1?NULL);
ReleaseSemaphore(mutex?1?NULL);
}
else
{
printf(“顧客已滿\n“);
????????????ReleaseSemaphore(mutex?1?NULL);
}
}??
return?0;
}
int?main(int?argc?char*?argv[])?
{
customers??=?CreateSemaphore(NULL?0?5?NULL);
barbers????=?CreateSemaphore(NULL?0?1?NULL);
mutex??????=?CreateSemaphore(NULL?1?1?NULL);
h_barber??=?CreateThread(NULL?0?barber?NULL?0?NULL);
h_haircut?=?CreateThread(NULL?0?haircut?NULL?0?NULL);
WaitForSingleobject(h_barber?INFINITE);
WaitForSingleobject(h_haircut?INFINITE);
return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3040??2009-11-09?12:23??實驗二\理發(fā)師\barber\barber\barber.vcproj
?????文件???????1427??2009-11-09?15:57??實驗二\理發(fā)師\barber\barber\barber.vcproj.77A9D0331CA8430.Administrator.user
?????文件????????145??2009-11-09?14:36??實驗二\理發(fā)師\barber\barber\Debug\barber.exe.intermediate.manifest
?????文件???????5252??2009-11-09?14:36??實驗二\理發(fā)師\barber\barber\Debug\BuildLog.htm
?????文件???????2884??2009-11-09?14:36??實驗二\理發(fā)師\barber\barber\Debug\haircut.obj
?????文件?????????67??2009-11-09?14:36??實驗二\理發(fā)師\barber\barber\Debug\mt.dep
?????文件?????109568??2009-11-09?14:36??實驗二\理發(fā)師\barber\barber\Debug\vc80.idb
?????文件???????1518??2009-11-09?14:36??實驗二\理發(fā)師\barber\barber\haircut.cpp
?????文件????9694208??2009-11-09?15:57??實驗二\理發(fā)師\barber\barber.ncb
?????文件????????883??2009-11-08?22:15??實驗二\理發(fā)師\barber\barber.sln
????..A..H.??????8192??2009-11-09?15:57??實驗二\理發(fā)師\barber\barber.suo
?????文件??????57344??2009-11-09?14:36??實驗二\理發(fā)師\barber\debug\barber.exe
?????文件??????69632??2009-11-08?21:46??實驗二\生產(chǎn)者消費者\main\debug\main.exe
?????文件??????10210??2009-11-08?21:46??實驗二\生產(chǎn)者消費者\main\main\Debug\BuildLog.htm
?????文件????????145??2009-11-08?21:46??實驗二\生產(chǎn)者消費者\main\main\Debug\main.exe.intermediate.manifest
?????文件???????6487??2009-11-08?21:46??實驗二\生產(chǎn)者消費者\main\main\Debug\main.obj
?????文件?????????67??2009-11-08?21:46??實驗二\生產(chǎn)者消費者\main\main\Debug\mt.dep
?????文件?????109568??2009-11-08?21:46??實驗二\生產(chǎn)者消費者\main\main\Debug\vc80.idb
?????文件???????3825??2009-11-08?21:46??實驗二\生產(chǎn)者消費者\main\main\main.cpp
?????文件???????3035??2009-11-08?15:49??實驗二\生產(chǎn)者消費者\main\main\main.vcproj
?????文件???????1427??2009-12-15?21:53??實驗二\生產(chǎn)者消費者\main\main\main.vcproj.77A9D0331CA8430.Administrator.user
?????文件????9317376??2009-12-15?21:53??實驗二\生產(chǎn)者消費者\main\main.ncb
?????文件????????877??2009-11-08?15:47??實驗二\生產(chǎn)者消費者\main\main.sln
????..A..H.?????13312??2009-12-15?21:53??實驗二\生產(chǎn)者消費者\main\main.suo
?????文件??????57344??2009-11-08?21:42??實驗二\生產(chǎn)者消費者\producer-consumer\debug\producer-consumer.exe
?????文件???????5922??2009-11-08?21:42??實驗二\生產(chǎn)者消費者\producer-consumer\producer-consumer\Debug\BuildLog.htm
?????文件?????????67??2009-11-08?21:42??實驗二\生產(chǎn)者消費者\producer-consumer\producer-consumer\Debug\mt.dep
?????文件????????145??2009-11-08?21:42??實驗二\生產(chǎn)者消費者\producer-consumer\producer-consumer\Debug\producer-consumer.exe.intermediate.manifest
?????文件???????2427??2009-11-08?21:42??實驗二\生產(chǎn)者消費者\producer-consumer\producer-consumer\Debug\producer-consumer.obj
?????文件?????109568??2009-11-08?21:42??實驗二\生產(chǎn)者消費者\producer-consumer\producer-consumer\Debug\vc80.idb
............此處省略81個文件信息
- 上一篇:gisoffice軟件
- 下一篇:Kerberos v5 源代碼
評論
共有 條評論