LINUX.ORG.RU

История изменений

Исправление quiet_readonly, (текущая версия) :

Можно даже без флага, сделать разделяемый указатель на данные, когда второй поток забирает пакет на обработку - он обнуляет указатель (под защитой mutex), когда первый поток подготовил данные - выставляет указатель (под защитой mutex), и будит второго через condition_variable, связанный с тем же mutex.

Во-первых очереди нет и указатель (лучше умный, unique_ptr) всегда хранит актуальный пакет либо равен nullptr.

Во-вторых борьба с suspicious wakeup упрощается - надо просто проверить указатель.

Исходная версия quiet_readonly, :

Можно даже без флага, сделать разделяемый указатель на данные, когда второй поток забирает пакет на обработку - он обнуляет указатель (под защитой mutex), когдп первый поток подготовил данные - выставляет указатель (под защитой mutex), и будит второго через condition_variable, связанный с тем же mutex.

Во-первых очереди нет и указатель (лучше умный, unique_ptr) всегда хранит актуальный пакет либо равен nullptr.

Во-вторых борьба с suspicious wakeup упрощается - надо просто проверить указатель.