У меня, я думаю, небольшая проблема с читателями писателями [1]. Мне нужно использовать семафоры для этой задачи, и я не могу использовать общие переменные между читателями.
У меня есть Writer:
sem_t *write;
write = sem_open("/write", O_CREAT, 0600, 1);
do{
sem_wait(write);
printf("Critical section in writer\n");
sem_post(write);
}while(1);
return 0;
}
и Reader:
int main(){
sem_t *mutex;
sem_t *write;
int count=0;
mutex = sem_open("/mutex", O_CREAT, 0600, 5);
write = sem_open("/write", O_CREAT, 0600, 1);
do{
sem_wait(mutex);
count++;
if (count==1){
sem_wait(write);
}
sem_post(mutex);
printf("Critical section in readers\n");
sem_wait(mutex);
count--;
if(count==0)
sem_post(write);
sem_post(mutex);
}while(1);
Мой учитель сказал мне использовать этот шаблон для его решения:
Reader:
P(Sw)
P(Sr)
V(Sw)
#read
V(Sr)
Writer:
P(Sw)
for i in 1..N: P(Sr)
# writing
for i in 1..N: V(Sr)
V(Sw)
Может ли кто-нибудь помочь мне понять, почему я не могу использовать переменную count
, поскольку мне сказали, что она используется читателями, помогите мне понять идея, предложенная учителем, и способы ее реализации. Спасибо!
[1] Проблема читателей-писателей: комната рассчитана на n читателей, читатели заходят в комнату, занимают там место и через некоторое время уходят. Если комната пуста, писатель может попасть внутрь, но только один писатель может находиться в комнате одновременно. Задача: обеспечить реализацию 2-х программ, реализующих задачу читателей-писателей, чтобы можно было динамически запускать новые процессы с соблюдением ограничений