ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
22 декабря
1012926 Топик полностью
dxWAk (18.06.2020 15:05, просмотров: 924) ответил fk0 на Допустим, я хочу сделать в threadX логгер. Он будет писать в кольцевой буфер в памяти, из которого медленно и печально будет выпечатываться в компорт. Задача достаточно классическая. Логгировать одновременно могут все потоки. Как сделать кольцевой буфер -- понятно. В принципе он может быть реализован на lockless-алгоритмах, но.... Но поскольку компорт медленный, то буфер может быть в переполненном состоянии (регулярно), то потоки пытающиеся писать в лог должны ожидать
Я бы использовал очередь, в потоке, который логирует ошибку 

UINT tx_queue_send(TX_QUEUE *queue_ptr, VOID *source_ptr, ULONG wait_option);

В потоке, который работает с ком портом

UINT tx_queue_receive(TX_QUEUE *queue_ptr, VOID *destination_ptr, ULONG wait_option);

Механизм синхронизации по шагам 2 и 8 встроен в ОС, пока очередь заполнена и не прошло время wait_option поток заблокирован.

При необходимости можно обрабатывать возвращаемое функций tx_queue_send значения для дальнейших действий