資源簡介
基于共享內(nèi)存實現(xiàn)的理發(fā)師問題.
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#if?defined?(__GNU_LIBRARY__)&&?!defined?(_SEM_SEMUN_UNDEFINED)
#else
union?semun
{
int?val;
struct?semid_ds?*buf;
unsigned?short?int?*array;
struct?seminfo?*__buf;
};
#endif
#define?SHMDATASIZE?1000
#define?BUFFERSIZE?(SHMDATASIZE?-sizeof(int))
#define?WAITING?8
#define?MUTEX?16
#define?CHAIRS?3
#define?CUS?20
#define?BAR?28
#define?MAXSIZE?100
int?Semid?=?0;
void?customer?(int?shmid);
void?barbers(int?shmid);
void?v(int?*mutex);
void?p(int?*mutex);
int?masterinit?(void);
int?*standardinit?(int?shmidint?*semid);
void?delete?(void);
void?sigdelete?(int?signum);
void?cuthair(int?shmidint?semidchar?*buffer);
int?mysemget?(key_t?kyeint?nsemsint?semflg);
int?mysemctl?(int?shmidint?semnumint?cmdunion?semun?arg);
int?mysemop?(int?semidstruct?sembuf?*sopsunsigned?nsops);
int?myshmget?(key_t?keyint?sizeint?shmflg);
void?*myshmat?(int?shmidconst?void?*shmaddrint?shmflg);
int?myshmctl?(int?shmidint?cmdstruct?shmid_ds?*buf);
int?main?(int?argcchar?*argv[])
{
char?selection[3];
int?shmid;
if?(argc?2)
{
shmid?=?masterinit();
}
else?
{
shmid?=?atoi?(argv[1]);
}
printf?(“Who?are?you?customer(1)?barber(2)?\n“);
fgets?(selectionsizeof?(selection)stdin);
switch?(selection[0])
{
case?‘1‘:customer(shmid);break;
case?‘2‘:barbers(shmid);break;
default:printf?(“invalid?choicequit?\n“);
}
return?0;
}
void?customer(int?shmid)
{
int?semid=0;
int?*buffer=0;
int?*waiting=0;
int?*customers=0;
int?*mutex=0;
int?*barbers=0;
char?selection[3];
buffer=standardinit(shmid&semid);
waiting=buffer+WAITING;
mutex=buffer+MUTEX;
customers=buffer+CUS;
barbers=buffer+BAR;
printf(“?begin?to?run?the?id?of?share?memory?is?%d?semaphore?id?is?%d?\n“shmidsemid);
??//??printf(“Press?any?key?when?you?want?to?cut?hair... \n“);
// fgets?(selectionsizeof?(selection)stdin);
????//??? fflush(stdout);
printf(“Now?waiting?for?mutex...?\n“);
p(mutex);
*waiting=*waiting+1;
if(*waiting ???????????????????????
v(customers);
v(mutex);
????????????????????????printf(“waiting?for?barber...\n“);
p(barbers);
????????????????????????printf(“you?are?getting?hair?cut...\n“);
*waiting=*waiting-1;
printf(“finished\n“);
}
else?{v(mutex);*waiting=*waiting-1;
printf(“so?many?peoplelet‘s?go!\n“);
?? }
}
void?barbers(int?shmid)
{ int?semid=0;
int?*buffer=0;
int?*waiting=0;
int?*customers=0;
int?*mutex=0;
int?*barbers=0;
char?selection[3];
buffer=standardinit(shmid&semid);
waiting=buffer+WAITING;
mutex=buffer+MUTEX;
customers=buffer+CUS;
barbers=buffer+BAR;
while(1){char?input[3];
????????????????printf(“waiting?for?customer\n“);
p(customers);
???????????????//?printf(“waiting?for?mutex\n“);
//p(mutex);
//*waiting=*waiting-1;
printf(“Press?any?key?when
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????245726??2007-12-24?23:12??report.pdf
?????文件???????9297??2007-12-17?17:12??c
?????文件???????5906??2007-12-17?16:57??cusbar.c
?????文件?????160388??2007-12-24?23:11??readme.pdf
-----------?---------??----------?-----??----
???????????????421317????????????????????4
評論
共有 條評論