Я тестирую сценарий производителя-потребителя, когда производитель блокируется, когда он пытается записать в заполненную очередь. Я хочу проверить, что поток производителя просыпается правильно и работает в ожидании после того, как потребитель читает из полной очереди *. API-адрес для записи в очередь вызывает pthread_cond_wait() при обнаружении полной очереди, и API-интерфейс чтения сигнализирует условную переменную после чтения из очереди.
Как обеспечить появление Последовательности 3 по любой другой последовательности операций в тестовой среде?
* Да, я хочу протестировать этот ограниченный сценарий отдельно; есть и другие тесты, которые проверяют функциональность всей очереди, этот тест в дополнение к этим.
Подробнее -
Существует один мьютекс, управляющий очередью. Там 2 условные переменные - одна для записи записи (все записи), одна для сигнал считывается (все считывается). Блокировка queue_write API для чтения condvar, если очередь заполнена. Блокировка queue_read на блоке write condvar, если очередь пуста. Вся сигнализация происходит под эгида мьютекса.
В очереди больше нюансов, но с целью установления контекста для этого вопроса, это адекватное резюме функционирования очереди.