Possible Duplicate:
bathroom synchronization and queue of threads
我在 st中审视了类似的问题,并用了眼光来回答我的问题。 就家庭工作而言,我得到了浴室同步问题。 一个共用的浴室,一个妇女不能使用,而一个男子在那里,反之亦然。 我试图说明的是,如果另一性别在浴室里的话,如何阻止和重新铺面。 到目前为止,我有几种条件,如果不存在异性,如果我不告诉胎儿等待。 离开时,如果你的性别没有在休息室里留下,那么(semaphore)的另一种性就让了。 我不知道,如果我遇到什么麻烦,要打上read子,或让ema人等待。 这里是我的法典。
/ 变数
sem_t male;
sem_t female;
int maleInBath;
int femaleInBath;
pthread_mutex_t coutMutex;
/ 初始变量
void personInitGlobals()
{
// LEAVE THIS STATEMENT
pthread_mutex_init(&coutMutex, NULL);
// TODO: Complete this function
int init=0;
maleInBath=0;
femaleInBath=0;
sem_init(&male, 0, init);
sem_init(&female, 0, init);
}
休息室
void personEnterRestroom(int id, bool isFemale)
{
// LEAVE THESE STATEMENTS
pthread_mutex_lock(&coutMutex);
cout << "Enter: " << id << (isFemale ? " (female)" : " (male)") << endl;
pthread_mutex_unlock(&coutMutex);
// TODO: Complete this function
if(isFemale && maleInBath==0){
femaleInBath++;
}else if(isFemale && maleInBath >0){
sem_wait(&female);
}else if(!isFemale && femaleInBath==0){
maleInBath++;
}else{
sem_wait(&male);
}
}
离开休息室
void personLeaveRestroom(int id, bool isFemale)
{
// LEAVE THESE STATEMENTS
pthread_mutex_lock(&coutMutex);
cout << "Leave: " << id << (isFemale ? " (female)" : " (male)") << endl;
pthread_mutex_unlock(&coutMutex);
// TODO: Complete this function
if(isFemale){
femaleInBath--;
if(femaleInBath==0){
sem_post(&male);
}
}else{
maleInBath--;
if(maleInBath==0){
sem_post(&female);
}
}
}