глобальный признак

Статус
В этой теме нельзя размещать новые ответы.

horpah

Гуру форума
Регистрация
20 Июн 2010
Сообщения
199
Реакции
55
Господа гуру PHP. Прошу вашего мнения или совета.

Есть скрипт, в нем функция calc(). Эта функция довольно "тяжелая". Вызывается она всегда при загрузке любой страницы сайта, а также при AJAX запросах, которые на некоторых страницах идут 1 раз в 2 секунды.

Возможна ситуация, когда эти AJAX-запросы придут почти одновременно из разных закладок/браузеров/компов. Поскольку ф-я calс() "тяжеловата", то случается, что 2-й поток начинает ее выполнять, когда 1-й еще не завершил. Т.О в нек. промежуток времени ее одновременно выполняют 2 скрипта. Необходимо придумать решение, чтобы скрипт, начав ее выполнять, мог установить какой-то глобальный признак, видимый всем обрабатываемым запросам.

Что-то типа этого:

PHP:
......
calc();
.....
function calc()
{
 if(CALC_EVENT) // CALC_EVENT - какой-то признак того что эта функция выполняется другим скриптом
   return;
 try{
 set_calcEvent(); //установить CALC_EVENT
 .........
 код, гарантированно выполняемый в пределах всего сайта всего в одном экземпляре
 .........
 }catch(e){
   close_calcEvent(); // сбросить CALC_EVENT
 } 
}
 

Alternator

Постоялец
Регистрация
23 Мар 2009
Сообщения
295
Реакции
145
То что вы хотите называется семафор
и для этого даже есть специаольные функции(но кажется они т олько под никсы, в контексте PHP)
в более простых сулчаях вполне подойдет использование файла и flock, или даже просто файла.
в него вы пишите uniqid() например, а по завершении функции стираете
 

venetu

Мой дом здесь!
Регистрация
28 Мар 2007
Сообщения
745
Реакции
273
или даже просто файла.
в него вы пишите uniqid() например, а по завершении функции стираете
Еще неплохо бы проверять время создания файла, и слишком старый удалять насильно.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху