Я остановился на довольно простом решении для объединения сообщений об ошибках / регистрации из нескольких рабочих потоков в один файл. Каждый раз, когда я хочу записать в этот файл, я сначала записываю вывод в собственный временный файл потока. Затем я добавляю этот временный файл в «главный» файл журнала, используя flock. Пропустив некоторые детали здесь, идея:
fid=fopen(threadtemp, 'w');
fprintf(fid, 'Error message goes here');
fclose(fid);
runme = sprintf('flock -x %s -c ''cat %s >> %s''', LOGFILE, threadtemp, LOGFILE);
system(runme);
Для получения подробной информации см. Справочную страницу flock, но приведенный выше вызов получает блокировку eXclusive для файла журнала, выполняет предоставленную Команду под блокировкой и затем освобождает ее.
Это, очевидно, работает только в том случае, если вы работаете в системе, в которой есть flock (Linux / OS X и только некоторые типы файловых систем) и вы делаете что-то, что можно сделать из командной строки, но Держу пари, что это довольно распространенный вариант использования.