代码是:
Semaphore rsem = 1;
Semaphore wsem = 1;
Semaphore mutex_rc = 1;
Semaphore mutex wc = 1;
Semaphore other_readers = 1;
int rc = 0;
int wc = 0;
void reader(void)
{
while(true)
{
down(other_readers);
down(rsem);
down(mutex_rc);
rc++;
if(rc == 1)
down(wsem);
up(mutex_rc);
up(rsem);
up(other_readers);
read_data_base();
down(mutex_rc);
rc--;
if(rc == 0)
up(wsem);
up(mutex_rc);
}
}
void writer()
{
while(true)
{
down(mutex_wc);
wc++;
if(wc == 1)
down(rsem);
up(mutex_wc);
down(wsem);
write_data_base();
up(wsem);
down(mutex_wc);
wc--;
if(wc == 0)
up(rsem);
up(mutex_wc);
}
}
我必须告诉谁得到了偏好。我了解信号量以及它们的用途,但我无法确定谁在这里得到了优先选择。 而other_readers信号量的原因是什么? 解决此类问题的方法是什么?