Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Корректна ли блокировка?
 
 автор: demonow   (21.02.2012 в 11:01)   письмо автору
 
 

Это блокировка для записи в файл, пойдет для гостевой книги.
А вот куда можно применить разделяемую блокировку??
fclose(fopen($file,"a+t"));

$f=fopen($file,"r+t");
flock($f,LOCK_EX);
fwrite($f,"text");
fflush($f);
fclose($f);
И еще, когда файл блокируется каким-то процессом, остальные процессы уже будут получать false для своих блокировок?

  Ответить  
 
 автор: cheops   (21.02.2012 в 11:37)   письмо автору
 
   для: demonow   (21.02.2012 в 11:01)
 

Снимите еще блокировку при помощи LOCK_UN перед закрытием
close(fopen($file,"a+t"));

 $f=fopen($file,"r+t");
 flock($f,LOCK_EX);
 fwrite($f,"text");
 fflush($f);
 flock($f,LOCK_UN);
 fclose($f);

>И еще, когда файл блокируется каким-то процессом, остальные процессы уже будут получать
>false для своих блокировок?
Они ждать будут, должны по крайней мере, пока файл будет открыт (LOCK_UN).

PS Кстати, вы можете писать сообщения в разные файлы, а потом через некоторое время агрегировать их в один общий файл. Если процессы будут обладать своими собственными файлами - это гарантирует, что что никто не вмешается в их работу и не потребуется применять блокировку.

  Ответить  
 
 автор: demonow   (21.02.2012 в 11:44)   письмо автору
 
   для: cheops   (21.02.2012 в 11:37)
 

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

  Ответить  
 
 автор: cheops   (21.02.2012 в 12:17)   письмо автору
 
   для: demonow   (21.02.2012 в 11:44)
 

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

  Ответить  
 
 автор: demonow   (21.02.2012 в 12:53)   письмо автору
 
   для: cheops   (21.02.2012 в 12:17)
 

Спасибо

  Ответить  
 
 автор: cheops   (21.02.2012 в 13:21)   письмо автору
 
   для: demonow   (21.02.2012 в 12:53)
 

На самом деле это примитивная файловая очередь, очередь из файлов. На практике, в серверах эту очередь строят в оперативной памяти. Это кстати, определяет сложность в базах данных, которые зачастую могут использовать только одно ядро... в очередь-то они могут многими процессами писать, а вот выполнять запросы из очереди только одним (по крайней мере в MySQL сейчас эта проблема стоит очень остро)... В любом случае не следует принимать файловую блокировку как какое-то великое достижение компьютерной мысли, это примитивная модель, созданная в расчете на то, что она будет переноситься с платформы на платформу. Операционные системы, что Windows, что Linux обладают гораздо более развитыми средствами разграничения доступа, организации параллельных вычислений и прочими системными вещами, на которые языки высокого уровня не могут ориентироваться просто по своей природе. Однако, вы как разработчик имеете полную свободу действий и можете выходить за рамки языка и даже операционной системы, если вам это потребуется.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования