Russian Qt Forum
Ноябрь 27, 2024, 05:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Чтение и запись в файл в разных потоках  (Прочитано 4924 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« : Сентябрь 08, 2021, 21:06 »

Всем доброго времени суток!
Встал вопрос чтения и записи в разных потоках.
Ответ кажется очевидным.
Берем файл мьючим его и читаем в одном потоке,
а в другом пишем.

Но это кажется как-то не очень хорошей идей.
Может есть какой-нибудь варинт асинхронного чтения и записи?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Сентябрь 09, 2021, 06:41 »

Но это кажется как-то не очень хорошей идей.
А почему?
Может есть какой-нибудь варинт асинхронного чтения и записи?
Не вижу откуда им взяться. Ну если неск "читателей", то ReadWriteLock - но здесь и это не проходит т.к. каждому нужна своя позиция в файле
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #2 : Сентябрь 09, 2021, 07:37 »

Но это кажется как-то не очень хорошей идей.
А почему?
Может есть какой-нибудь варинт асинхронного чтения и записи?
Не вижу откуда им взяться. Ну если неск "читателей", то ReadWriteLock - но здесь и это не проходит т.к. каждому нужна своя позиция в файле

Читаем из файла блоки информации определенного размера. Пишем естественно только в конец файла.

Поток на чтение
Код:

mutex_file.lock() ;

file. seek(pos) ;
file. read(but, size_block) ;

mutex_file.unlock() ;



Код:

mutex_file.lock() ;

file. seek(end_file) ;
file.write(buf, size_buf);

mutex_file.unlock() ;


 Стоит ли открывать и закрывать файл в потоках?  
« Последнее редактирование: Сентябрь 09, 2021, 08:36 от demaker » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Сентябрь 09, 2021, 08:50 »

Пишем естественно только в конец файла.
Это проще но не так уж естественно

Стоит ли открывать и закрывать файл в потоках?  
Ни в коем случае. Файл должен быть открыт один раз по чтению-записи.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #4 : Сентябрь 15, 2021, 13:53 »

Можно задействовать файловые потоки. Не уверен, что можно натравить два потока на один файл..
Записан
Vidos
Новичок

Offline Offline

Сообщений: 6


Просмотр профиля
« Ответ #5 : Октябрь 26, 2021, 19:14 »

Сдаётся мне, что вы всё усложняете.
У файла, в один момент, может быть только одна позиция чтения/записи. Никак не получится одновременно читать кусок данных от куда-то с одной позиции и писать данные в другую позицию. По этому, это однозначно глухая блокировка файла в момент чтения/записи.
По этому задача делится на две части: фоновая работа с данными, после того как данные обработаны (подготовлены), запись в файл в файл с его блокировкой.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Октябрь 26, 2021, 19:18 »

У файла, в один момент, может быть только одна позиция чтения/записи.
Да ну перестаньте, одна. Улыбающийся
Попробуйте сами, открыть один файл из разных потоков и читать по случайным смещениям.
Или в один поток, но запустите несколько процессов, которые будут читать один файл.
Записан
Vidos
Новичок

Offline Offline

Сообщений: 6


Просмотр профиля
« Ответ #7 : Октябрь 26, 2021, 20:28 »

У файла, в один момент, может быть только одна позиция чтения/записи.
Да ну перестаньте, одна. Улыбающийся
Попробуйте сами, открыть один файл из разных потоков и читать по случайным смещениям.
Или в один поток, но запустите несколько процессов, которые будут читать один файл.

Ну, если так пересмотреть задачу, то я с вами полностью согласен.  Улыбающийся
Параллельное чтение из одного файла разными процессами вполне нормально. Но я исходил из текущей задачи - несколько потоков, чтение-запись, один объект файла. А тут уже другие подходы требуется.  Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.145 секунд. Запросов: 23.