最近我正在使用一段与信号量相关的代码。我们的想法是与读者和作家一起实践这些过程。这是我为评估提出的解决方案,但是现在对于考试,我们必须使用额外的线程“读者”来准备替代方案。有了这个新线程,我必须遵守以下条件:
1.-我必须等到第一个帖子中没有读者。 2.-首先,我必须在第三个线程开始之前等待编写器进程。
你能帮助我吗?我想我必须使用额外的互斥(互斥)来控制其他过程的写作和阅读,但我不知道如何提议。您在这里是代码:
void reader()
{ query_t query; result_t result;
while (1) {
query = ...; /* Query generation */
entering();
result = get_info(&gs, query);
exiting();
/* Process result */
... }
}
void writer()
{ int new_value; query_t query;
while (1) {
new_value = ...;
query = ...;
sem_wait(mutex_db);
put_info(&gs, query, new_value);
sem_signal(mutex_db);
}
void entering()
{ sem_wait(mutex_ctrl);
reader_in ++;
if (reader_in == 1)
sem_wait(mutex_db);
sem_signal(mutex_ctrl);
}
void exiting()
{ sem_wait(mutex_ctrl);
reader_in --;
if (reader_in == 0)
sem_signal(mutex_db);
sem_signal(mutex_ctrl);
}