我被这项任务卡住了,只是无法理解。
比方说,有一排游客在等着也要排队的汽车。一次只能坐一辆车上车去接两个等待的人。一旦有2位访客进入汽车,它就必须离开平台。
我需要从忙碌中更改以下方法“ carArrives()”和“ visitorArrives()”-等待仅使用Mutex或Semaphores。
很抱歉有任何错误。
int availableCars = 0;
int availableSeats = 0;
void carArrives(){
while(availableCars > 0){noop;} //exchange this with Mutex/Semaphore
availableCars = 1;
driveToPlatform();
openDoors();
availableSeats = 2;
while(availableSeats > 0){noop;} //exchange this with Mutex/Semaphore
closeDoors();
leavePlatform();
availableCars = 0;
}
void visitorArrives(){
while(availableSeats < 1){noop;} //exchange this with Mutex/Semaphore
enterCar();
availableSeats = availableSeats - 1;
}
答案 0 :(得分:0)
如果生成互斥锁:
pthread_mutex MyMutex = PTHREAD_MUTEX_INIT;
然后在当前线程正在修改/访问资源时,阻止程序的其他任何部分修改某些资源:
pthread_mutex_lock( &MyMutex );
// modify or access resource here
pthread_mutex_unlock( &MyMutex );
注意:要有效,访问该资源的代码中的所有位置都必须使用相同的“ MyMutex”
关于:
availableSeats = 2;
while(availableSeats > 0){noop;}
建议在锁定相同资源的互斥体之间暂停一点,而不必锁定,以允许其他线程有一段时间修改“ availableSeats”值。例如:
pthread_mutex SeatsFilled = PTHREAD_MUTEX_INIT;
...
pthread_mutex_lock( &SeatsFilled );
availableSeats = 2;
pthread_mutex_unlock( &SeatsFilled );
...
do
{
int numSeats;
pthread_mutex_lock( &SeatsFilled );
numSeats = availableSeats;
pthread_mutex_unlock( &SeatsFilled );
if( !numSeats )
{
nanosleep( 1000 );
}
} while( numSeats );
...