【发布时间】:2011-09-20 00:18:41
【问题描述】:
我的回答很简单: 是否可以在 PHP 中使用 system_v 信号量来解决生产者-消费者问题? 我的意思是,可以在here 找到经典的 prod-cons 解决方案。
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。
您知道如何解决这个问题吗?
【问题讨论】:
标签: php concurrency semaphore