Язык скриптования сайтов Parser 3

Filelock


lock. Эксклюзивное выполнение кода


^file:lock[имя файла-блокировки]{код}

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

Пример

^file:lock[/counter.lock]{

    $file[^file::load[text;/counter.txt]]



    $string[^eval($file.text+1)]

    ^string.save[/counter.txt]

}

Количество посещений: $string<br>


В отсутствие блокировки, два одновременных обращения к странице могли вызвать увеличение счетчика… на 1, а не на 2:

·пришел первый;  

·пришел второй;  

·считал первый, значение счетчика 0;  

·считал второй, значение счетчика 0;  

·увеличил первый, значение счетчика 1;  

·увеличил второй, значение счетчика 1;  

·записал первый, значение счетчика 1;  

·записал второй поверх только что записанного первым, значение счетчика 1, а не 2.  


Внимание: всегда думайте об одновременно приходящих запросах. При работе с базами данных обычно есть встроенные в SQL-сервер средства для их корректной обработки.



Содержание раздела