Можно ли параллельно вызывать fwrite & fclose из двух потоков для одного и того же дескриптора файла? - PullRequest
4 голосов
/ 10 сентября 2010

Что произойдет, если fwrite & fclose будут вызваны параллельно из двух потоков одного и того же файлового дескриптора?

Ответы [ 3 ]

9 голосов
/ 10 сентября 2010

POSIX требует FILE доступа, чтобы быть потокобезопасным, но поскольку fclose закрывает файл и делает недействительным указатель, пути нет (т.е. это не просто проблема спецификации, но фундаментальная проблема API, которая никогда не может быть "исправлено "или сделано, чтобы уйти", чтобы использовать fclose, когда другой поток мог получить доступ к FILE неподвижному.Вам нужно будет сделать свою собственную блокировку.

4 голосов
/ 10 сентября 2010

fwrite и fclose работают с FILE структурой данных. Поскольку это большая структура данных, в которой хранится нечто большее, чем просто дескриптор файла, ответ будет плохим.

Не делайте этого, пока вы не обеспечите атомарную работу с использованием мьютексов.

0 голосов
/ 10 сентября 2010

Для таких обстоятельств вам необходимо определить приоритеты ваших методов. Вы можете управлять методами с помощью «synchronized».

...