|
|
|
| Это блокировка для записи в файл, пойдет для гостевой книги.
А вот куда можно применить разделяемую блокировку??
fclose(fopen($file,"a+t"));
$f=fopen($file,"r+t");
flock($f,LOCK_EX);
fwrite($f,"text");
fflush($f);
fclose($f);
И еще, когда файл блокируется каким-то процессом, остальные процессы уже будут получать false для своих блокировок? | |
|
|
|
|
|
|
|
для: 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 Кстати, вы можете писать сообщения в разные файлы, а потом через некоторое время агрегировать их в один общий файл. Если процессы будут обладать своими собственными файлами - это гарантирует, что что никто не вмешается в их работу и не потребуется применять блокировку. | |
|
|
|
|
|
|
|
для: cheops
(21.02.2012 в 11:37)
| | а если писать скрипт для залы читателей, то это уже надо разделяемую блокировку использовать,
то-есть берем тот скрипт для записи(писатели) и еще другой с разделяемой блокировкой для читателей(их намного больше чем писателей) и они оба работают с одним файлом.Получаеться уже на 2 файла можно разбить? | |
|
|
|
|
|
|
|
для: demonow
(21.02.2012 в 11:44)
| | Суть в том, что читатели не читают из файлов, в которые пишут. Или наоборот писатели пишут в файлы только один раз. Т.е. записали информацию в файл и все, в него больше ничего не пишут, в следующий раз информация ляжет в другой файл. В результате вы уверены, что в этот файл никто ничего не пишет и можете его читать без блокировок. | |
|
|
|
|
|
|
|
для: cheops
(21.02.2012 в 12:17)
| | Спасибо | |
|
|
|
|
|
|
|
для: demonow
(21.02.2012 в 12:53)
| | На самом деле это примитивная файловая очередь, очередь из файлов. На практике, в серверах эту очередь строят в оперативной памяти. Это кстати, определяет сложность в базах данных, которые зачастую могут использовать только одно ядро... в очередь-то они могут многими процессами писать, а вот выполнять запросы из очереди только одним (по крайней мере в MySQL сейчас эта проблема стоит очень остро)... В любом случае не следует принимать файловую блокировку как какое-то великое достижение компьютерной мысли, это примитивная модель, созданная в расчете на то, что она будет переноситься с платформы на платформу. Операционные системы, что Windows, что Linux обладают гораздо более развитыми средствами разграничения доступа, организации параллельных вычислений и прочими системными вещами, на которые языки высокого уровня не могут ориентироваться просто по своей природе. Однако, вы как разработчик имеете полную свободу действий и можете выходить за рамки языка и даже операционной системы, если вам это потребуется. | |
|
|
|