【问题标题】:PHP, PCNTL and queue in shared memoryPHP、PCNTL 和共享内存中的队列
【发布时间】:2012-09-27 13:37:07
【问题描述】:

我在 php 中实现共享内存时遇到问题。是否可以在共享内存中创建队列?

代码在这里:

// queue class
class AddressQueue extends \Nette\Object {

private $queue = array();

public function add($var) {
    $this->queue[] = $var;
}

public function get() {
    return array_shift($this->queue);
}

public function num() {
    return count($this->queue);
}
}

$segmentKey = "987654";
$permissions = 0666;
$size = 8092;
$sharedSegment = shm_attach($segmentKey, $size, $permissions);

shm_put_var($sharedSegment, QUEUE_INDEX, new AddressQueue());

...此时,如何将项目(int 或非常短的字符串)添加到队列中?有可能吗?

【问题讨论】:

    标签: php queue shared-memory pcntl


    【解决方案1】:

    好吧,您可以使用 shm_get_var() 将其恢复,但这样做没有意义,只需在使用 shm_put_var() 之前添加它,如下所示:

    $addrQueue = new AddressQueue();
    $addrQueue->add('whatever');
    shm_put_var($sharedSegment, QUEUE_INDEX, $addrQueue);
    

    【讨论】:

    • 我需要父进程将项目添加到队列的末尾,子进程同时从头开始获取项目:-(
    • 那么使用shm_get_var(),这就是使用共享内存的重点:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 2010-12-30
    • 2011-07-31
    • 2013-11-18
    • 2013-09-18
    • 2014-01-11
    相关资源
    最近更新 更多