мой ответ довольно прост: возможно ли использовать семафор 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, не получив его ранее.У вас есть идеи, как это обойти?