Моя задача - найти решение проблемы читателей-писателей с помощью posix pthreads. Я порождаю 3 читателей и 1 писатель.
Спецификация задачи просит добавлять значения в очередь 2 за раз (писатели). Считыватели снимают по очереди по очереди (когда в очереди есть значение). Очередь проверена и работает.
Проблема, с которой я столкнулся, заключается в том, что при запуске программы получается, что только 1 поток чтения читает большую часть времени . Иногда повторное выполнение приводит к тому, что все 3 читателя используются. Но в большинстве случаев используется только 1 читатель. Я не уверен, почему это странное поведение происходит.
Заранее спасибо.
Expected (Sometimes):
TID: -684419328
TID: -684419328
TID: -673929472
TID: -673929472
TID: -694909184
TID: -694909184
...
Actual (Sometimes):
TID: -684419328
TID: -684419328
TID: -684419328
TID: -684419328
TID: -684419328
TID: -684419328
...
pthread_cond_t qServiced = PTHREAD_COND_INITIALIZER;
pthread_cond_t qElement = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
#include "rw.h"
#include "queue.h"
queue* q;
void* reader()
{
int serviced = 0;
int x;
while(!fin)
{
pthread_mutex_lock(&mutex);
counter++;
while(isEmpty(q))
{
pthread_cond_signal(&qEmpty);
pthread_cond_wait(&qElement, &mutex); e
}
printf("TID: %d\n", (int)pthread_self());
num* n = dequeue(q); //Take one task
printf("Num1: %d\n", n->num1);
printf("Num2: %d\n", n->num2);
serviced++;
pthread_cond_signal(&qServiced); //Signal that task has been serviced
pthread_mutex_unlock(&mutex);
}
}