17 / 9 / 4
Регистрация: 09.02.2014
Сообщений: 185
|
|
1 | |
Доступ к файлам из разных потоков, как исключить коллизии?22.12.2018, 05:25. Показов 2685. Ответов 2
Метки нет (Все метки)
Разные потоки осуществляют чтение разных файлов произвольным образом командой System.IO.FileStream(NameFile, FileMode.Open). Иногда, при обращении к одному и тому же файлу, происходит исключение. Пробовал использовать проверенные семафоры [Semaphore1.WaitOne() и Semaphore1.Close() до и после операций чтения], но тут они меня подвели, потоки останавливаются в строке WaitOne и все тут, видимо семафоры годны только для операций с переменными.
Есть ли простой способ, кроме обработки исключения, чтобы подождать закрытия файла другими потоками?
0
|
22.12.2018, 05:25 | |
Ответы с готовыми решениями:
2
Доступ к папкам и файлам из разных подсетей Доступ к БД с разных потоков Совместный доступ к dbf-файлам из разных приложений Доступ к очереди из разных потоков |
Администратор
|
|
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 | |
22.12.2018, 06:35 | |
Помогаю со студенческими работами здесь
3
Доступ к стриму из разных потоков Обезопасить доступ к коллекции из разных потоков Доступ к функции с разных потоков C++ Builder Обеспечить корректный доступ к элементу из разных потоков Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |