синхронизация межпроцессного чтения/записи
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
синхронизация межпроцессного чтения/записи
Ситуация следующая - одна тулза пишет в файл, другая в него читает. Как на C# написать такой код, что бы ждал пока файл закрыт для чтения потому что туда пишут и сразу после освобождения читал? Ну что-то типа waitForSingleObject для тредов на Си, только не для тредов а для файлов и на шарпе? А еще лучше ждал заданное время, а если не дождался кидал экспешн?
-
- Уже с Приветом
- Posts: 9195
- Joined: 04 Mar 2011 03:04
- Location: SFBA
Re: синхронизация межпроцессного чтения/записи
Что-то на тему FileSystemWatcher. Когда-то рисовал подобное на C++, но нотификации собственно на изменение файла.
... and even then it's rare that you'll be going there...
-
- Уже с Приветом
- Posts: 9195
- Joined: 04 Mar 2011 03:04
- Location: SFBA
Re: синхронизация межпроцессного чтения/записи
Запись та объект ядра OS? Или mutex с именем для обоих тулзов, чтобы оба могли его использовать? Они, вроде, в разных процессах.
... and even then it's rare that you'll be going there...
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: синхронизация межпроцессного чтения/записи
Хмм, про Винды я уже много чего не помню, но вот практически уверен, что у них есть какой-нить вариант select / epoll.
Ну то есть один процесс (асинхронно) читает, другой пишет. Ничего усложнять или как-то дополнительно "синхронизовать" - это огород городить.
Ну то есть один процесс (асинхронно) читает, другой пишет. Ничего усложнять или как-то дополнительно "синхронизовать" - это огород городить.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 9195
- Joined: 04 Mar 2011 03:04
- Location: SFBA
Re: синхронизация межпроцессного чтения/записи
Оба тула должны быть напианы тогда самим автором. Ну, конечно, named mutex у них есть, только global. Но мьютекса мало, ещё надо событие. Или надо ждать в цикле try_lock(), что-то такое, не очень. Ну и глобальные события на раз делается.partner_ca wrote: ↑23 May 2017 22:23Имена объектов синхронизации глобальные.Medium-rare wrote: ↑23 May 2017 22:14 Запись та объект ядра OS? Или mutex с именем для обоих тулзов, чтобы оба могли его использовать? Они, вроде, в разных процессах.
Можно юзать из разных процессов.
... and even then it's rare that you'll be going there...
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: синхронизация межпроцессного чтения/записи
А где эти глобальные мутехи хранятся? Shared memory?
-
- Уже с Приветом
- Posts: 9195
- Joined: 04 Mar 2011 03:04
- Location: SFBA
Re: синхронизация межпроцессного чтения/записи
Хорошо известная фича Kernel Objects. Принципиально с другими современными OS нет различий, какой-то глобальный хэндл, в данном случае, по имени, и понеслась. Где те объекты хранятся, прикладников волновать не должно.
... and even then it's rare that you'll be going there...
-
- Уже с Приветом
- Posts: 514
- Joined: 07 Dec 2001 10:01
- Location: toronto
Re: синхронизация межпроцессного чтения/записи
Зависит от того, в каком режиме "тулза" открывает файл на запись. Я бы начал с попытки использовать LockFileEx. Или FileStream.Lock, который, по моим подозрениям, есть то же самое под капотом (но я лично не проверял).
Использование именованных объектов ядра поможет только если "тулза" создаёт таковые при открытия файла на запись, чего можно ожидать только от совершенно параноидальных кодописателей.
Использование именованных объектов ядра поможет только если "тулза" создаёт таковые при открытия файла на запись, чего можно ожидать только от совершенно параноидальных кодописателей.
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: синхронизация межпроцессного чтения/записи
Я в свое время вместо синхронизации просто переименовывал файлы по окончанию записи.
Операция переименования атомарная (вроде бы) во всех системах.
Пока работает...
Операция переименования атомарная (вроде бы) во всех системах.
Пока работает...
-
- Уже с Приветом
- Posts: 9392
- Joined: 18 Mar 2004 15:11
- Location: New York -> FL
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: синхронизация межпроцессного чтения/записи
Не, я ничего не пишу, я только читаю. Ну вернее пишу в другом приложении через скрипты, и как там лочится я не знаю, скрипты то к операционке обращаются через чужое приложениеtau wrote: ↑24 May 2017 01:57 Зависит от того, в каком режиме "тулза" открывает файл на запись. Я бы начал с попытки использовать LockFileEx. Или FileStream.Lock, который, по моим подозрениям, есть то же самое под капотом (но я лично не проверял).
Использование именованных объектов ядра поможет только если "тулза" создаёт таковые при открытия файла на запись, чего можно ожидать только от совершенно параноидальных кодописателей.
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: синхронизация межпроцессного чтения/записи
Ну ну если бы оба процесса я писал, то понятно сделать синхронизацию - говно вопрос. Конкретно там что - одно приложение пишет логи - приложение не мое, а второй процесс уже мой их анализирует и рил тайм статистику на сайт фигачет. Оно время от времени эксепшин кидает что файл прочитать нельзя - не смертельно, что юзеру приходится иногда страницу обновить, но как то совсем несолидно.
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: синхронизация межпроцессного чтения/записи
А, ну тогда я не так задачу понял.OtherSide wrote: ↑24 May 2017 18:14 Ну ну если бы оба процесса я писал, то понятно сделать синхронизацию - говно вопрос. Конкретно там что - одно приложение пишет логи - приложение не мое, а второй процесс уже мой их анализирует и рил тайм статистику на сайт фигачет. Оно время от времени эксепшин кидает что файл прочитать нельзя - не смертельно, что юзеру приходится иногда страницу обновить, но как то совсем несолидно.
Тогда погуглите аналог inotify на виндах.
Я забыл, как оно называется, но точно есть. Я сам когда-то давно его использовал.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: синхронизация межпроцессного чтения/записи
Вот первый же ответ: https://stackoverflow.com/questions/351 ... on-windows
Medium-rare вон оказывается давным давно вам написал выше.
Только потом дискуссия к какой-то синхронизации зачем-то сползла...
Medium-rare вон оказывается давным давно вам написал выше.
Только потом дискуссия к какой-то синхронизации зачем-то сползла...
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 803
- Joined: 24 Jan 2007 07:32
- Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA
Re: синхронизация межпроцессного чтения/записи
What about this?OtherSide wrote: ↑23 May 2017 20:55 Ситуация следующая - одна тулза пишет в файл, другая в него читает. Как на C# написать такой код, что бы ждал пока файл закрыт для чтения потому что туда пишут и сразу после освобождения читал? Ну что-то типа waitForSingleObject для тредов на Си, только не для тредов а для файлов и на шарпе? А еще лучше ждал заданное время, а если не дождался кидал экспешн?
You apply filter watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite and on firing event try to read?
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: синхронизация межпроцессного чтения/записи
Пропустил, спасибо! Буду изучатьM. Ridcully wrote: ↑24 May 2017 18:32 Вот первый же ответ: https://stackoverflow.com/questions/351 ... on-windows
Medium-rare вон оказывается давным давно вам написал выше.
Только потом дискуссия к какой-то синхронизации зачем-то сползла...