Использование System V Семафор в PHP - PullRequest
2 голосов
/ 20 сентября 2011

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

semaphore fillCount = 0; // items produced
semaphore emptyCount = BUFFER_SIZE; // remaining space

procedure producer() {
    while (true) {
        item = produceItem();
        down(emptyCount);
            putItemIntoBuffer(item);
        up(fillCount);
    }
}

procedure consumer() {
    while (true) {
        down(fillCount);
            item = removeItemFromBuffer();
        up(emptyCount);
        consumeItem(item);
    }
}

Как вы можете видеть, что производитель увеличивает fillCount после помещения элемента в буфер.В любом случае, как я понял в php-doc, вы можете использовать только sem_acquire и sem_release для манипулирования семафором, и вы не можете вызвать sem_release, не получив его ранее.У вас есть идеи, как это обойти?

1 Ответ

1 голос
/ 20 сентября 2011

Если это важно, рассмотрите возможность использования реального сервера очереди сообщений: RabbitMQ, OpenAMQ, ActiveMQ, ZeroMQ, beanstalkd, и т. Д. . Использование семафоров или других локальных механизмов не масштабируется за пределы одного сервера.

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