Реклама на сайте Advertise with us

PHP и mutex

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 30/08/10 в 23:25       Ответить с цитатойцитата 

Может кто тоже ломал голову - есть ли возможность в php работать с mutex или чем-то аналогичным?
Семафоры имхо предлагать смысла нет - нет у пыха средств проверить, занят он или нет.
flock - туда же, т.к. корректно работает в пределах одного процесса.

0
 



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 06/09/10 в 10:53       Ответить с цитатойцитата 

все еще актуально icon_smile.gif

0
 



С нами с 31.05.10
Сообщения: 1991
Рейтинг: 487

Ссылка на сообщениеДобавлено: 06/09/10 в 11:24       Ответить с цитатойцитата 

рекомендую использовать БД для записи/чтения состояний или выбрать другой язык программирования для твоей задачи smail54.gif

1
 



С нами с 13.08.08
Сообщения: 1538
Рейтинг: 1011

Ссылка на сообщениеДобавлено: 06/09/10 в 11:45       Ответить с цитатойцитата 

+1 за БД. Просто табличка с парами записей ID/состояние. Таблицу можно спокойно лочить со всеми вытекающими, эмулируя mutex.

1
 



С нами с 01.02.07
Сообщения: 231
Рейтинг: 294

Ссылка на сообщениеДобавлено: 06/09/10 в 13:34       Ответить с цитатойцитата 

>flock - туда же, т.к. корректно работает в пределах одного процесса.
неправда

>рекомендую использовать БД для записи/чтения состояний
смотря какие задачи стоят
Если блокировать надо данные в БД, то стоит использова средства БД для блокировки
Если данные в файлах, то соотв fcntl/flock/lockf

3
 



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 06/09/10 в 15:07       Ответить с цитатойцитата 

zuborg писал:
Если данные в файлах, то соотв fcntl/flock/lockf

да, блокировка нужна файла - захватил+считал+поменял+отпустил, либо проверил захвачено на данный момент или нет (поэтому семафор и не прошел - нет через пых по таймауту ожидание прервать)
спасибо, посмотрю в сторону fcntl.

zuborg писал:

>рекомендую использовать БД для записи/чтения состояний
смотря какие задачи стоят

+1, базу тут превлекать смысла нет

zuborg писал:
>flock - туда же, т.к. корректно работает в пределах одного процесса.
неправда

я был бы рад, если юы это было неправда. и всегда доверял этому методу, пока не напаролся сам на практике и не нашел объяснения причины в сети.

для начала цитата из официальной документации по php (http://php.net/manual/en/function.flock.php)

Warning
On some operating systems flock() is implemented at the process level. When using a multithreaded server API like ISAPI you may not be able to rely on flock() to protect files against other PHP scripts running in parallel threads of the same server instance!

имеется Linux 2.6.18-128.7.1.el5
апач "форкается" на N "процессов", между ними flock не везде работаетю вот пример лога с колизией:

Код: [развернуть]


p.s. допускаю, что проблему можно решить донастройкой системы, но хотелось бы универсальное решение, не зависящее сильно от настроек сервера )

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 06/09/10 в 15:22       Ответить с цитатойцитата 

ТС, ты мозахист или просто хочешь зарисоваться?

Возьми нормальный язык программирования, тебе говорят.

-3
 



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 06/09/10 в 15:35       Ответить с цитатойцитата 

Pentarh, каждой задаче свое решение, если задача решается быстро и в пару строк без гемороя на пхп, то зачем использовать другой язык, для запуска результата которого нужно соблюсти больше условий?

а так ты чем-то прав, от желания "идеальности" приходися быть немного и мАзОхистом. да и кем вообще быть не приходся icon_smile.gif)))

0
 



С нами с 01.02.07
Сообщения: 231
Рейтинг: 294

Ссылка на сообщениеДобавлено: 06/09/10 в 19:47       Ответить с цитатойцитата 

>flock - туда же, т.к. корректно работает в пределах одного процесса.
надо писать что flock может некорретно работать в пределах нескольких тредов одного процесса, причем только для php ;)

Представить не могу как программисты php смогли поломать flock, он лочит filehandle, номер которого не может повторяться для разных тредов одного процесса.

6
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 06/09/10 в 21:16       Ответить с цитатойцитата 

Heavy писал:
если задача решается быстро и в пару строк без гемороя на пхп


Если. Ключевое слово - толстое "если". Это точно твой случай? icon_wink.gif

3
 



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 06/09/10 в 22:11       Ответить с цитатойцитата 

zuborg писал:
Представить не могу как программисты php смогли поломать flock, он лочит filehandle, номер которого не может повторяться для разных тредов одного процесса.

ох, не знаю... много у них заГАДочных вещей сделано или не сделано. но всеравно - как можно лишить язык нормальных методов синхронизации, а те что дали еще и кастрировать?!! icon_cry.gif

Dr.Syshalt: - мой-мой. задача решена мелкой правкой пыха. но мне очень интересно , как ее решить - не имея возможности править пых, что бы на виртуалах, например, решать подобные задачи... а ведь много "скриптов" люди пишут полагаясь на эту функцию... icon_smile.gif

0
 



С нами с 21.09.03
Сообщения: 7329
Рейтинг: 2144

Ссылка на сообщениеДобавлено: 06/09/10 в 23:42       Ответить с цитатойцитата 

Heavy писал:
Pentarh, каждой задаче свое решение, если задача решается быстро и в пару строк без гемороя на пхп, то зачем использовать другой язык, для запуска результата которого нужно соблюсти больше условий?


Не факт, что для другого языка надо больше усилий. Я когда-то очень давно весьма полюблял писать скрипты на freepascal - получалось очень просто, недурно, и результат зависил только от libc, не требуя запуска жирного и неповоротливого интерпретатора. icon_smile.gif

Моя подпись.

1
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 07/09/10 в 00:32       Ответить с цитатойцитата 

Heavy писал:
но мне очень интересно , как ее решить - не имея возможности править пых, что бы на виртуалах, например, решать подобные задачи...


Ну, я бы таки попробовал писать на perl smail101.gif
Там с IPC все нормально.

1
 



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 07/09/10 в 11:02       Ответить с цитатойцитата 

Вообщем, на данном форуме, решения, кроме как, писать на другом языке, придумать не получилось icon_cool.gif

Что ж, вывод есть у этого "решения" есть и другой - любой чисто пхп скрипт/продукт требующий синхронизации для разделения доступа, можно браковать не глядя - автор подобного продукта либо "пиздит" либо сам не ведает бед своего детища smail101.gif т.к. даже самый простецкий счетчик посещений в файл, тупо будет сбрасыватся на некоторых машинах icon_razz.gif

0
 



С нами с 13.08.08
Сообщения: 1538
Рейтинг: 1011

Ссылка на сообщениеДобавлено: 07/09/10 в 12:35       Ответить с цитатойцитата 

Быстро, в пару строк и без геморроя задача решается на похапе с использованием СУБД. Если использовать СУБД нельзя по условию задачи - наверное, действительно лучше задействовать другой язык.

1
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 07/09/10 в 13:40       Ответить с цитатойцитата 

Heavy писал:
Вообщем, на данном форуме, решения, кроме как, писать на другом языке, придумать не получилось icon_cool.gif


Ну это как бы и первый форум, что я знаю, на котором многие люди вообще ничего, кроме PHP, не знают (большинство, про тебя не буду говорить), и пишут на нем где надо и не надо. Так что предложение использовать что-то более подходящее для задачи звучит как вполне здравая и свежая мысль ;)

Цитата:
любой чисто пхп скрипт/продукт требующий синхронизации для разделения доступа, можно браковать не глядя - автор подобного продукта либо "пиздит" либо сам не ведает бед своего детища smail101.gif т.к. даже самый простецкий счетчик посещений в файл, тупо будет сбрасыватся на некоторых машинах icon_razz.gif


Как говорила герцогиня из "Алисы в Зазеркалье": каждому овощу - свое место. PHP - это именно язык для написания в знаменитом чукотском стиле "что вижу, о том пою", и где главная цель - это чтобы программа хоть как-то доковыляла до конца (в других свалившийся insert в базу вызовет исключительную ситуацию, в том же Perl+DBI или Java+JDBC, но не тут), а на корректность того, что в итоге получилось, всем как бы похуй. Ты видел, сколько "программистов" каждый второй вызов предваряют символом @ - то есть "сделай как получится"? А ты вообще про какие-то непонятные вещи, да про корректность счетчиков мозг пудришь icon_biggrin.gif Тебя удивляет, что авторам счетчиков в принципе похуй до таких мелочей, как потенциальная некорректность их кода? По-моему, вполне закономерно.

6
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »