php get 例子,PHP sem_get 用法 手册 | 示例代码

Implementation of a read-write semaphore in PHP:

constREAD_ACCESS=0;

constWRITE_ACCESS=1;/**

* @access private

* @var resource - mutex semaphore

*/private$mutex;/**

* @access private

* @var resource - read/write semaphore

*/private$resource;/**

* @access private

* @var int

*/private$writers=0;/**

* @access private

* @var int

*/private$readers=0;/**

* Default constructor

*

* Initialize the read/write semaphore

*/public function__construct() {$mutex_key=ftok('/home/cyrus/development/php/sysvipc/rw_semaphore.php','m');$resource_key=ftok('/home/cyrus/development/php/sysvipc/rw_semaphore.php','r');$this->mutex=sem_get($mutex_key,1);$this->resource=sem_get($resource_key,1);

}/**

* Destructor

*

* Remove the read/write semaphore

*/public function__destruct() {sem_remove($this->mutex);sem_remove($this->resource);

}/**

* Request acess to the resource

*

* @param int $mode

* @return void

*/private functionrequest_access($access_type=self::READ_ACCESS) {

if ($access_type==self::WRITE_ACCESS) {sem_acquire($this->mutex);/* update the writers counter */$this->writers++;sem_release($this->mutex);sem_acquire($this->resource);

} else {sem_acquire($this->mutex);

if ($this->writers>0$this->readers==0) {sem_release($this->mutex);sem_acquire($this->resource);sem_acquire($this->mutex);

}/* update the readers counter */$this->readers++;sem_release($this->mutex);

}

}

private functionrequest_release($access_type=self::READ_ACCESS) {

if ($access_type==self::WRITE_ACCESS) {sem_acquire($this->mutex);/* update the writers counter */$this->writers--;sem_release($this->mutex);sem_release($this->resource);

} else {sem_acquire($this->mutex);/* update the readers counter */$this->readers--;

if ($this->readers==0)sem_release($this->resource);sem_release($this->mutex);

}

}/**

* Request read access to the resource

*

* @return void

*/public functionread_access() {$this->request_access(self::READ_ACCESS); }/**

* Release read access to the resource

*

* @return void

*/public functionread_release() {$this->request_release(self::READ_ACCESS); }/**

* Request write access to the resource

*

* @return void

*/public functionwrite_access() {$this->request_access(self::WRITE_ACCESS); }/**

* Release write access to the resource

*

* @return void

*/public functionwrite_release() {$this->request_release(self::WRITE_ACCESS); }

}?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值