У меня был вопрос о темах читателя / писателя, и я не хотел слишком усложнять ситуацию, поэтому пришел сюда за советом.
У меня есть массив, который в конечном итоге будет прочитан 4-мя потоками и записан в 3. (1 читатель 3 чтение / запись). Моя цель состояла в том, чтобы как-то не иметь операции чтения, блокирующей другой поток, в то время как любая операция записи блокировала все потоки до завершения. Я почти уверен, что знаю, как сделать это с одним семафором на поток, но есть ли способ сделать это только с одним двоичным семейством, счетчиком или мьютексом (или чем-то менее 1 семафора на поток). Я буду использовать семафорную библиотеку VxWorks.
Если только VxWorks не поддерживает расшаренный / rwlock как у POSIX, Боюсь, это будет немного сложнее, чем просто.
Я бы предложил использовать POSIX pthread_rwlock_t
Если у вас есть. Если вы этого не сделаете, а VxWorks не предлагает какой-либо эквивалентной альтернативы, вам придется создать ее, используя другие примитивы. Можно построить rwlock поверх 2 семафоров, 3 мьютексов и двух целочисленных переменных. Увидеть Параллельное управление с «Читателями» и «Писателями»; П.Дж. Куртуа, Ф.Хейманс и Д.Л. Парнас; Исследовательская лаборатория MBLE; Брюссель, Бельгия.
Поскольку у вас есть только один читатель, это точно эквивалентно проблеме взаимного исключения (может быть только один поток). Непосредственного использования одного двоичного семафора должно быть достаточно. Инициатива с одним, P при входе, V при выходе.