История изменений
Исправление quiet_readonly, (текущая версия) :
Можно даже без флага, сделать разделяемый указатель на данные, когда второй поток забирает пакет на обработку - он обнуляет указатель (под защитой mutex), когда первый поток подготовил данные - выставляет указатель (под защитой mutex), и будит второго через condition_variable, связанный с тем же mutex.
Во-первых очереди нет и указатель (лучше умный, unique_ptr) всегда хранит актуальный пакет либо равен nullptr.
Во-вторых борьба с suspicious wakeup упрощается - надо просто проверить указатель.
Исходная версия quiet_readonly, :
Можно даже без флага, сделать разделяемый указатель на данные, когда второй поток забирает пакет на обработку - он обнуляет указатель (под защитой mutex), когдп первый поток подготовил данные - выставляет указатель (под защитой mutex), и будит второго через condition_variable, связанный с тем же mutex.
Во-первых очереди нет и указатель (лучше умный, unique_ptr) всегда хранит актуальный пакет либо равен nullptr.
Во-вторых борьба с suspicious wakeup упрощается - надо просто проверить указатель.