Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
17 / 9 / 4
Регистрация: 09.02.2014
Сообщений: 185
1

Доступ к файлам из разных потоков, как исключить коллизии?

22.12.2018, 05:25. Показов 2685. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Разные потоки осуществляют чтение разных файлов произвольным образом командой System.IO.FileStream(NameFile, FileMode.Open). Иногда, при обращении к одному и тому же файлу, происходит исключение. Пробовал использовать проверенные семафоры [Semaphore1.WaitOne() и Semaphore1.Close() до и после операций чтения], но тут они меня подвели, потоки останавливаются в строке WaitOne и все тут, видимо семафоры годны только для операций с переменными.
Есть ли простой способ, кроме обработки исключения, чтобы подождать закрытия файла другими потоками?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2018, 05:25
Ответы с готовыми решениями:

Доступ к папкам и файлам из разных подсетей
Всем доброго дня! Объясняю ситуацию и прошу помощи. На работе 2 офиса. В первом (главном) офисе...

Доступ к БД с разных потоков
как реализовать доступ к одной базе данных с разных потоков? когда один сервер обрабатывает...

Совместный доступ к dbf-файлам из разных приложений
Здравствуйте! Имеются dbf-ки, с которыми работает некая программа (написанная, наверное, на...

Доступ к очереди из разных потоков
Подскажите по многопоточности, у меня есть очередь (Queue) и мне надо организовать к ней доступ из...

2
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,344
Записей в блоге: 1
22.12.2018, 06:07 2
Лучший ответ Сообщение было отмечено Sampl как решение

Решение

Sampl, 1) можно использовать FileShare.Read при открытии файла чтобы разрешить совместное чтение. Самый простой способ.

2) Можно переделать алгоритм так чтобы не было "чтения произвольным образом", а внести некий порядок и очередность.

3) Можно написать механизм синхронизации используя который части кода будут ждать своей очереди. Семафороы здесь вполне подходят. Ты видимо что-то не так сделал.
2
17 / 9 / 4
Регистрация: 09.02.2014
Сообщений: 185
22.12.2018, 06:35  [ТС] 3
Спасибо, то что надо!
В моем случае файлы открываются лишь для чтения, достаточно указать FileAccess.Read, т.е. если файлы открываются для чтения то и конфликта нет никакого.
0
22.12.2018, 06:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2018, 06:35
Помогаю со студенческими работами здесь

Доступ к стриму из разных потоков
Задача такая, имеем мемористрим, в одном потоке постоянно пишем его. В другом потоке необходимо по...

Обезопасить доступ к коллекции из разных потоков
станет ли безопасным метод AddSafe? public static MyCollection myCol = new MyCollection(); ...

Доступ к функции с разных потоков C++ Builder
Как правильно объявить/создать функцию в C++Builder, чтобы она была доступна со всех потоков,...

Обеспечить корректный доступ к элементу из разных потоков
Возникла такая проблема. Есть приложение и в приложение есть элемент, к которому прикреплён некий...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru