Лочить читать-писать в файл

  • Автор темы Автор темы bizzon
  • Дата начала Дата начала

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 120
Реакции
135
Баллы
63
бытует мнение, что локировать файл на чтение не нужно, только на запись
насколько это мнение верно - наверное, тут нужно спрашивать у профильных программистов....
сам не знаю ответ на этот вопрос, но
всегда локаю, как запись, так и чтение, ибо есть подозрение, что если файл большой и
кол-во потоков тоже достаточно большое - без локировки можно поймать ошибку, что файл занят....
метод Dispose просто не успевает отрабатывать на большом количестве потоков, не успевая освободить файл....
могу ошибаться в этом вопросе, на истину не претендую, но сам всегда перестраховываюсь, локируя "чтение" файла
 
могу ошибаться в этом вопросе, на истину не претендую, но сам всегда перестраховываюсь, локируя "чтение" файла
к сожалению на видео показаны 2 разные блокировки, которые не блокируют друг друга.
Поэтому поток который будет в локе чтения, запросто пересечется с локом записи.

Для обычного счетчика достаточно 1-го лока, так как там время операции мизерное. Для больших файлов, которые предполагают долгое время считывания, можно использовать ReaderWriterLockSlim https://zennolab.com/discussion/threads/ne-iskljuchitelnaja-blokirovka-reader_writer_locks.98639/
 
к сожалению на видео показаны 2 разные блокировки, которые не блокируют друг друга.
Поэтому поток который будет в локе чтения, запросто пересечется с локом записи.

Для обычного счетчика достаточно 1-го лока, так как там время операции мизерное. Для больших файлов, которые предполагают долгое время считывания, можно использовать ReaderWriterLockSlim https://zennolab.com/discussion/threads/ne-iskljuchitelnaja-blokirovka-reader_writer_locks.98639/
да, верно, если обращение идет к одному файла - тогда реализуем в рамках одного объекта, ведь мы обращаемся как
для прочтения , так и для записи
если читаем с одного, а запись идет в другой файл - тогда пример из видео
 
Спасибо, всем.
Кубик Записать в файл как правильно?
 

Вложения

Вам надо было всю тему прочитать, а не начало.
C#:
Развернуть Свернуть Копировать
public class Locker
{
   
    public static object Proxy_SOCKS4 = new object();
}

C#:
Развернуть Свернуть Копировать
lock(Locker.Proxy_SOCKS4)
{
    
}
 
Я по видео Ilshakin как последний кубик расписать?
Screen capture - 196c987b5f2a847d3d7a0b9105ef7271 - Gyazo
gyazo.com
gyazo.com
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)