Пишу простую велосипедную библиотеку для ведения логов из программы. Она должна уметь писать в один файл из нескольких потоков. Поскольку при добавлении записи в лог туда пишется еще и заголовок, и еще много чего делается, функция записи блокируется:
int log (int priority, Facility *f, const char *msg, ...)
{
pthread_mutex_lock (&f->mutex);
... // записать сообщение
pthread_mutex_unlock (&f->mutex);
...
}
log_write_lock (f);
log (LOG_INFO, f, "несколько");
log (LOG_INFO, f, "сообщений");
log (LOG_INFO, f, "подряд");
log_write_unlock (f);