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 Ключевое слово является более общим решением.

Нет, это не потокобезопасно. Интуитивно понятно, как записать файл, если индекс является движущейся целью? Одна идея состоит в том, чтобы создать отдельные файлы и объединить их с другим процессом, возможно, вызванным каким-либо завершенным событием (например, все файлы прибыли).

Концепция записи в один файл с несколькими потоками имеет некоторый запах кода. ИМО, пересмотрите свои варианты и придумайте другой способ решения этой проблемы.

Другие вопросы по тегам