Аналог мьютекса для записи-чтения файла

 

Есть такая задача. На компе работают 10 терминалов, на каждом крутится один и тот же советник. Нет смысла всем 10 выполнять довольно тяжелые вычисления. Хочу сделать одного Master, остальные Slave's. Мастер делает расчеты и пишет инфу в общий файл, слейвы ее читают и далее отрабатывают "легкую" часть алгоритма.

И тут возникает проблема, а что, если мастер еще не все записал, а слейвы уже начали читать? В маркете нельзя использовать Win Api, так бы я мьютекс завел и проблема решена. Пока сделал так - Мастер перед записью данных взводит в самом начале файла флаг типа int, ждет какое-то время, пишет данные, потом флаг сбрасывает. Тоже криво и небезопасно, но лучше не придумал. Ну нет в MQL4/5 атомарных операций.

Кто чего посоветует/покритикует?


 
На слейвах можно задать проверку времени последнего изменения файла.
 
Дополнительный файл-семафор либо специальная метка в конце файла с данными, означающая корректность записи. Лучше доп. файл, чтоб зря не читать (возможно) большой файл данных.
 
Сам факт изменения файла. Делал индикатор, который работает с таймером и пересчитывает данные лишь при изменении файла. Сейчас точно не скажу - нет под рукой, но покопайте в эту сторону
 
Artyom Trishkin:
Сам факт изменения файла. Делал индикатор, который работает с таймером и пересчитывает данные лишь при изменении файла. Сейчас точно не скажу - нет под рукой, но покопайте в эту сторону

Это не решает озвученную проблему:

Alexey Volchanskiy:

И тут возникает проблема, а что, если мастер еще не все записал, а слейвы уже начали читать

 
Andrey Khatimlianskii:

Это не решает озвученную проблему:

А-а-а, СемёёёнСемёёёныч...

1. А возможно на лету менять флаг совместного доступа к файлу?

2. У мастера сделать флаг разрешения чтения файла слейвами, а слейвы должны сигналить флагами о завершении чтения.

 
Artyom Trishkin:
Сам факт изменения файла. Делал индикатор, который работает с таймером и пересчитывает данные лишь при изменении файла. Сейчас точно не скажу - нет под рукой, но покопайте в эту сторону
У меня размер файла не меняется, только данные. Можно конечно вычислять и запоминать контрольную сумму, но это накладно.
 
Andrey Khatimlianskii:
Дополнительный файл-семафор либо специальная метка в конце файла с данными, означающая корректность записи. Лучше доп. файл, чтоб зря не читать (возможно) большой файл данных.
Я сейчас сделал метку в 1 байт в начале файла, вроде работает. Блок данных небольшой.
 
Artyom Trishkin:

А-а-а, СемёёёнСемёёёныч...

1. А возможно на лету менять флаг совместного доступа к файлу?

2. У мастера сделать флаг разрешения чтения файла слейвами, а слейвы должны сигналить флагами о завершении чтения.

Я так понимаю, в MQL4 менять атрибуты открытого файла нельзя.
 

На мой взгляд, разумнее не писать метку в начало файла, а создавать и удалять файл-метку. Мастер - перед записью создает файл-метку, и начинает запись. Когда все посчитано и записано - файл-метка удаляется.

Слейвы - перед чтением - проверяют существование файл-метки, и считывают данные только в случае его отсутствия.

 
Andrey Khatimlianskii:
Дополнительный файл-семафор либо специальная метка в конце файла с данными, означающая корректность записи. Лучше доп. файл, чтоб зря не читать (возможно) большой файл данных.
Вот в том-то и дело, что придется постоянно обращаться к файлу и читать его содержимое. Протирать дырку на HDD в общем. Тема это больная для МТ. Ренат вроде обещал штатную БД - это сняло бы сразу все проблемы разом. Но, во-первых, обещанного от MQ можно ждать годами, а во вторых обещание было только по поводу МТ5 и никак МТ4, хотя почему так - странно.