Это проблема читателя-писателя только для согласованности чтения.Вот алгоритм:
void reader() {
while (1) {
P(mutex);
rc++;
if (rc == 1) P(db); /* <---- A */
V(mutex); /* <---- B */
read_data_base();
P(mutex);
rc--;
V(mutex);
if (rc == 0) V(db);
}
}
void writer() {
while (1) {
P(db);
write_data_base();
V(db);
}
}
Вот мои вопросы: 1. Какова цель строки A в коде считывателя?2. Если мы удалим эту строку, будет ли код по-прежнему работать правильно?