Будет ли конфликт экспертов?

 

Здравствуйте.

Несколько вопросов.

1. Возникнет ли конфликт, если два эксперта одновременно попытаются изменить глобальную переменную терминала?

GlobalVariableSet()

2. Возникнет ли конфликт, если два эксперта одновременно попытаются сделать запись в файл?

handle=FileOpen("FileName.CSV", FILE_CSV|FILE_READ|FILE_WRITE,';'); //Открываем файл
      FileSeek(handle, 0, SEEK_END);                             //Переходим на новую запись
      FileWrite(handle,A,B,C);                                      //Записываем
      FileClose(handle);                                            //Закрываем файл

3. Возникнет ли конфликт, если два эксперта одновременно попытаются создать файл (с использованием тех же операторов)?

Если конфликты возможны, есть ли способ их предотвратить или обнаружить и обработать?

Понятно, что вероятность таких совпадений очень мала, но очень не хочется неприятностей, если это все-же произойдет.

С уважением, Евгений

 
Конфликта не будет, а ошибку вернет GetLastError(). Если не хочется неприятностей - будьте к ним готовы.
 
l-evgene писал(а) >>

Если конфликты возможны, есть ли способ их предотвратить или обнаружить и обработать?

Создавайте переменные-флаги. В эту переменную записывается информация о том, что какой-то из экспертов выполняет потенциально конфликтную операцию. Прежде чем эксперт что-то сделает пусть сначала прочитает флаг и удостоверится, что другой эксперт в это время не выполняет конфликтную операцию.

 
nen >>:

Создавайте переменные-флаги. В эту переменную записывается информация о том, что какой-то из экспертов выполняет потенциально конфликтную операцию. Прежде чем эксперт что-то сделает пусть сначала прочитает флаг и удостоверится, что другой эксперт в это время не выполняет конфликтную операцию.


Спасибо, что ответили.

О флагах я думал. При этом ничего не меняется. Если возможны конфликты, описанные выше, с тем же успехом два эксперта одновременно начнут менять значение флага. Мне кажется, будет еще хуже, т.к. заклинит обоих.

 
l-evgene >>:


Спасибо, что ответили.

О флагах я думал. При этом ничего не меняется. Если возможны конфликты, описанные выше, с тем же успехом два эксперта одновременно начнут менять значение флага. Мне кажется, будет еще хуже, т.к. заклинит обоих.

еще раз для тех кто в танке: перед выполнением потенциально конфликтной операции эксперт 1. считывает значение флага 2. если оно 0 (второй эксперт не выполняет операцию), то 3. устанавливает флаг=1 4. выполняет операцию 5. устанавливает флаг=0.

два эксперта одновременно флаг менять не смогут. если вы о промежутк времени между пунктами 1. и 2., то команда условного перехода выполняется за один такт процессора, так что второй эксперт вклиниться сюда просто физически не сможет.

 

Насколько я знаю два эксперта одновременно одну глобальную переменную менять не могут, т.е. эта защита изначально заложена в терминале...

Вот только незадача я точно помню что про это читал где-то тут на форуме и это было не больше нескольких месяцев назад, но где вспомнить не могу.

И вобще есть вероятность, что это реализовано в 5, а не в 4 и именно в этом ключе и сообщалось, но в любом случае в 5 это точно есть, а в 4-ке под вопросом

P.S. Перечитал! Да, бредовенький пост получился... 8-)).

 
alsu >>:


два эксперта одновременно флаг менять не смогут. если вы о промежутк времени между пунктами 1. и 2., то команда условного перехода выполняется за один такт процессора, так что второй эксперт вклиниться сюда просто физически не сможет.

Yesss! Спасибо за решение. С тактами процессора у меня напряженка: не проходили мы этого:)

Причина обращения: