File.Open Cross Thread Writing
Безопасно ли открывать файл и записывать в него поток через несколько потоков? Если нет, что я мог бы реализовать, чтобы сделать его безопасным?
3 ответа
Нет, стандартный FileStream не является потокобезопасным.
Вы должны использовать var safe = Stream.Synchronized(File.Open(...));
создать потокобезопасную оболочку.
Stream.Synchronized()
на MSDN
Нет; это не безопасно само по себе, но вы можете использовать lock
ключевое слово для управления межпоточным доступом к объекту FileStream.
Например:
FileStream fStream = File.Open('foo.txt', FileMode.Append);
lock (fStream)
{
// Some operation on fStream
}
Ответ, отправленный Knaģis, может быть способом пойти в этом случае, но блокировка мьютекса с помощью lock
Ключевое слово является более общим решением.
Нет, это не потокобезопасно. Интуитивно понятно, как записать файл, если индекс является движущейся целью? Одна идея состоит в том, чтобы создать отдельные файлы и объединить их с другим процессом, возможно, вызванным каким-либо завершенным событием (например, все файлы прибыли).
Концепция записи в один файл с несколькими потоками имеет некоторый запах кода. ИМО, пересмотрите свои варианты и придумайте другой способ решения этой проблемы.