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

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 100
Благодарностей
129
Баллы
63

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
639
Благодарностей
580
Баллы
93
бытует мнение, что локировать файл на чтение не нужно, только на запись
насколько это мнение верно - наверное, тут нужно спрашивать у профильных программистов....
сам не знаю ответ на этот вопрос, но
всегда локаю, как запись, так и чтение, ибо есть подозрение, что если файл большой и
кол-во потоков тоже достаточно большое - без локировки можно поймать ошибку, что файл занят....
метод Dispose просто не успевает отрабатывать на большом количестве потоков, не успевая освободить файл....
могу ошибаться в этом вопросе, на истину не претендую, но сам всегда перестраховываюсь, локируя "чтение" файла
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 712
Баллы
113
могу ошибаться в этом вопросе, на истину не претендую, но сам всегда перестраховываюсь, локируя "чтение" файла
к сожалению на видео показаны 2 разные блокировки, которые не блокируют друг друга.
Поэтому поток который будет в локе чтения, запросто пересечется с локом записи.

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

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
639
Благодарностей
580
Баллы
93
к сожалению на видео показаны 2 разные блокировки, которые не блокируют друг друга.
Поэтому поток который будет в локе чтения, запросто пересечется с локом записи.

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

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 100
Благодарностей
129
Баллы
63
Спасибо, всем.
Кубик Записать в файл как правильно?
 

Вложения

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
Вам надо было всю тему прочитать, а не начало.
C#:
public class Locker
{
   
    public static object Proxy_SOCKS4 = new object();
}
C#:
lock(Locker.Proxy_SOCKS4)
{
    
}
 

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 100
Благодарностей
129
Баллы
63

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