Я предлагаю вам вместо использования двух (или любых фиксированных количество ...) буферов просто использовать очередь и, следовательно, "производитель / потребительские отношения.
Процесс, который получает пакеты, просто добавляет их в буфер определенного размера, и, когда буфер достаточно заполнен или указанный (короткий ...) временной интервал истек, местами (не пустой) буфер в очередь для обработки другим. Затем он выделяет новый буфер для собственного использования.
Приемный («другой ...») процесс пробуждается в любое время, когда может быть новым буфером в очереди для обработки. Он удаляет буфер, обрабатывает его, затем снова проверяет очередь. Спит только тогда, когда обнаружит, что очередь пуста. (Будьте внимательны, чтобы убедиться, что процесс не может принять решение о том, чтобы заснуть в тот самый момент, когда другой процесс решит дать ему сигнал ... здесь не должно быть "состояния гонки".)
Попробуйте просто выделить хранилище «для каждого сообщения» (что бы «сообщение» не значило для вас) и поместить это «сообщение» в очередь, чтобы не было ненужной задержки при обработке, вызванной «ожиданием буфера» заполнить."