Итак, я пытаюсь реализовать параллельную очередь в C. Я разделил методы на «методы чтения» и «методы записи». Итак, при доступе к методам записи, таким как push () и pop (), я получаю блокировку записи. И то же самое для методов чтения. Кроме того, у нас может быть несколько читателей, но только один писатель.
Чтобы заставить это работать в коде, у меня есть блокировка мьютекса для всей очереди. И два условных замка - один для писателя, другой для читателя. У меня также есть два целых числа, которые отслеживают количество читателей и писателей, которые в данный момент используют очередь.
Итак, мой главный вопрос - как реализовать нескольким читателям доступ к методам чтения одновременно?
На данный момент это мой общий код метода чтения: (В коде psuedo - не C. Я на самом деле использую pthreads).
mutex.lock();
while (nwriter > 0) {
wait(&reader);
mutex.unlock();
}
nreader++;
//Critical code
nreader--;
if (nreader == 0) {
signal(&writer)
}
mutex.unlock
Итак, представьте, что у нас есть читатель, который содержит мьютекс. Теперь любой другой читатель, который придет и попытается получить мьютекс, не сможет. Разве это не заблокирует? Тогда как многие читатели одновременно получают доступ к методам чтения?
Верны ли мои рассуждения? Если да, то как решить проблему?