Q : Моя проблема с этой реализацией заключается в следующем: не требует ли это соотношение 1: 1 между чтениями и записями из-за сигнализации? это
реализация не позволяет писать несколько элементов без каких-либо
читает между, так как каждая запись требует сигнала, запускаемого в
функция чтения (наоборот, многократное чтение).
Если функция write()
действительно аналогична представленной функции read()
, то да и нет. Я думаю, вы предполагаете, что в стеке никогда не может быть более одного элемента, но это, в частности, не так. Обратите внимание, как поток, входящий в вашу функцию read()
и находящий непустой стек, будет вообще обходить ожидание переменной условия. Поток ожидает чтения, только если стек пуст. Аналогом с другой стороны будет то, что потоки ожидают записи, только если стек заполнен до отказа.
Q2 Как долго сигнал "действителен" после вызова pthread_cond_signal (...)?
Нет времени вообще. Только потоки, уже ожидающие переменную условия, могут быть разблокированы, когда это CV передано. После этого не будет никакой памяти о полученном сигнале, даже если он не был разблокирован ни одним потоком.