信号量读者 - 作者有一个额外的线程

时间:2014-01-23 21:48:10

标签: multithreading

最近我正在使用一段与信号量相关的代码。我们的想法是与读者和作家一起实践这些过程。这是我为评估提出的解决方案,但是现在对于考试,我们必须使用额外的线程“读者”来准备替代方案。有了这个新线程,我必须遵守以下条件:

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);
}

0 个答案:

没有答案