У меня есть приложение C со многими рабочими потоками. Важно, чтобы они не блокировались, поэтому, когда рабочие потоки должны записывать в файл на диске, я заставляю их записывать в циклический буфер в памяти, а затем выделяю выделенный поток для записи этого буфера на диск.
Рабочие потоки больше не блокируются. Выделенный поток может безопасно блокироваться при записи на диск, не затрагивая рабочие потоки (он не удерживает блокировку при записи на диск). Мой буфер памяти настроен так, чтобы он был достаточно большим, чтобы поток записи мог не отставать.
Все это отлично работает. Мой вопрос: как мне реализовать что-то подобное для stdout?
Я мог бы использовать макрос printf() для записи в буфер памяти, но у меня нет контроля над всем кодом, который может быть записан в стандартный вывод (некоторые из них находятся в сторонних библиотеках).
Мысли? НикБ
FILE
просто попадет в состояние неисправимой ошибки, если он заблокируется, когда ему нужно очистить.) - person R.. GitHub STOP HELPING ICE   schedule 19.02.2011