資源簡介
一個(gè)理發(fā)店由一個(gè)有幾張椅子的等待室和一個(gè)放有一張理發(fā)椅的理發(fā)室組成。1. 若沒有要理發(fā)的顧客,則理發(fā)師去睡覺;2. 若一顧客進(jìn)入理發(fā)店,理發(fā)師正在為別人理發(fā),且等待室有空椅子,則該顧客就找張椅子按順序坐下;3. 若一顧客進(jìn)入理發(fā)店,理發(fā)師在睡覺,則叫醒理發(fā)師為該顧客理發(fā);4. 若一顧客進(jìn)入理發(fā)店且所有椅子都被占用了,則該顧客就離開。
代碼片段和文件信息
//2007-12-23?10:46:11
??????
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#define??MAX_CHAIR_NO?50?
#define?MAX_CUSTOM_NO?10
#define?MAX_BARBER_NO?8
int?chair_no=5;
time_t?end_time;?/**//*end?time*/
sem_t?mutexcustomersbarbers;
int?count?=?0;//等待理發(fā)的顧客數(shù)
void?barber(void*?arg);
void?customer(void*?arg);
??????
int?main(int?argc?char?*argv[])
{
int?i=0;
int?custom_no=1;
int?barber_no=1;
int?interval=20;
pthread_t?barber_id[MAX_BARBER_NO];
pthread_t?custom_id[MAX_CUSTOM_NO];
int?ret?=?0;
if(argc==1){
????}else?if(argc==2){
if(strcmp(argv[1]“-h“)||(strcmp(argv[1]“-H“))){
printf(“usage:?param:?barber_no?cust_no?interval?chair_no\n“);
exit(0);
}
custom_no=atoi(argv[1]);
}else?if(argc==3){
barber_no=atoi(argv[1]);
custom_no=atoi(argv[2]);
}else?if(argc==4){
barber_no=atoi(argv[1]);
custom_no=atoi(argv[2]);
interval=atoi(argv[3]);
}else?if(argc==5){
barber_no=atoi(argv[1]);
custom_no=atoi(argv[2]);
interval=atoi(argv[3]);
chair_no=atoi(argv[4]);
}
if(barber_no>MAX_BARBER_NO)?barber_no=MAX_BARBER_NO;
if(custom_no>MAX_CUSTOM_NO)?custom_no=MAX_CUSTOM_NO;
if(chair_no>MAX_CHAIR_NO)?chair_no=MAX_CHAIR_NO;
printf(“barber?no:?%d?customer?no:?%d?interval(s)?%d?chair?no:?%d\n“
barber_nocustom_nointervalchair_no);
end_time?=?time(NULL)+interval;
??
評論
共有 條評論