資源簡介
模擬:桌上有一只盤子,每次只能放入一個水果。爸爸專向盤子中放蘋果,媽媽專向盤子中放桔子,一個女兒專等吃盤子里的蘋果,一個兒子專等吃盤子里的桔子。只要盤子空則爸爸或媽媽都可以向盤子放一個水果,僅當盤子中有自己需要的水果時,兒子或女兒可以從盤子中取出水果。
采用Windows的事件機制實現(xiàn)。
代碼片段和文件信息
#include??
#include??
using?namespace?std;??
//聲明句柄??
HANDLE?EmptyPlate;??
HANDLE?Apple;
HANDLE?orange;??
HANDLE?fatherThread;
HANDLE?motherThread;
HANDLE?sonThread;
HANDLE?daughterThread;
//線程函數(shù)聲明??
DWORD?WINAPI?father(LPVOID?IpParameter);??
DWORD?WINAPI?mother(LPVOID?IpParameter);??
DWORD?WINAPI?daughter(LPVOID?IpParameter);??
DWORD?WINAPI?son(LPVOID?IpParameter);??
??
int?main()??
{??
????//創(chuàng)建信號量??
????EmptyPlate?=?CreateSemaphore(NULL11NULL);??//盤子??
????Apple?=?CreateSemaphore(NULL01NULL);?//蘋果??
????orange?=?CreateSemaphore(NULL01NULL);?//桔子??
??
????//創(chuàng)建線程??
????fatherThread?=?CreateThread(NULL0fatherNULL0NULL);??
????motherThread?=?CreateThread(NULL0motherNULL0NULL);??
????daughterThread?=?CreateThread(NULL0daughterNULL0NULL);??
????sonThread?=?CreateThread(NULL0sonNULL0NULL);??
?
????//等線程的結(jié)束??
????WaitForSingleobject(fatherThreadINFINITE);???
????WaitForSingleobject(motherThreadINFINITE);???
WaitForSingleobject(daughterThreadINFINITE);???
WaitForSingleobject(sonThreadINFINITE);???
????//關(guān)閉線程句柄??
????CloseHandle(fatherThread);????
????CloseHandle(motherThread);??
????CloseHandle(daughterThread);??
????CloseHandle(sonThread);??
??
????//關(guān)閉信號量句柄??
????Clos
評論
共有 條評論