PHP назвал семафоры? - PullRequest
       4

PHP назвал семафоры?

4 голосов
/ 28 сентября 2010

Я оглядывался по сторонам, но я не могу найти какую-либо реализацию именованных семафоров POSIX для PHP.Единственное, что я вижу, это семафоры SysV.

(2 вопроса)

Есть ли какой-либо способ доступа к именованным семафорам из PHP в настоящее время?

Есть ли планы на будущие выпускиPHP?

Ответы [ 2 ]

3 голосов
/ 30 сентября 2010

Вот моя "именованная" реализация семафора, но я не уверен, что вы ищете простой преобразователь строки в int.

/**
 * Generate a semaphore integer from a string/key
 *
 * @param string $identifier
 * @return int
 */
function sem_key($identifier) {
    $md5 = md5($identifier);
    $key = 0;
    for ($i = 0; $i < 32; $i++) { 
        $key += ord($md5{$i}) * $i;
    }
    return $key;
}
2 голосов
/ 30 сентября 2010

Я полагаю, что краткий ответ будет NO , из моего "исследования" я обнаружил, что в настоящее время в PHP нет реализации семафоров с именами POSIX.

Боб Фэнджер опубликовал интересный обходЧтобы преобразовать строки в ключи семафора SysV, недостатком является то, что вы должны реализовывать один и тот же алгоритм в каждом коде, в котором вам нужен семафор.

Однако в итоге я использовал flock() для файла блокировки.

PHP

# open an exclusive lock
$lock = fopen('/path/to/file.lock', 'w');
flock($lock, LOCK_EX);

# edit a file
$f = fopen ('/path/to/file.txt', 'a');
fwrite($f, "append through PHP\n");
fclose($f);

# unlock
flock($lock, LOCK_UN);
fclose($lock);

PERL

use Fcntl qw(:flock);

# open an exclusive lock
open LOCK, '>/path/to/file.lock';
flock LOCK, LOCK_EX;

# edit a file
open FILE, '>>/path/to/file.txt';
print FILE "append through PERL\n";
close FILE;

# unlock
flock LOCK, LOCK_UN;
close LOCK;

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

примечание: flock() работает в качестве рекомендательного механизма блокировки файлов, если любая другая программапытается изменить файл без вызова flock(), это удастся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...