Threaded::lock

(PECL pthreads < 3.0.0)

Threaded::lock同步控制

Warning

pthreads v3 中已移除此方法。 请使用 Threaded::synchronized() 方法。

说明

public Threaded::lock ( ) : bool

给对象属性表加锁

参数

此函数没有参数。

返回值

布尔值,表示加锁是否成功

范例

Example #1 给对象属性加锁

<?php
class My extends Thread {
    public function 
run() {
        
var_dump($this->lock());
        
/** 其他线程无法进行读/写操作 **/
        
var_dump($this->unlock());
        
/** 其他线程可以进行读/写操作 */
    
}
}
$my = new My();
$my->start();
?>

以上例程会输出:

bool(true)
bool(true)

User Contributed Notes

312036773 at qq dot com 18-Dec-2015 04:24
index.php
<?php
if (class_exists ( "Entity\My" )) {
   
$my = new Entity\My ( 200 );
}
if (
class_exists ( "Entity\T" )) {
    for(
$i = 0; $i < 3; $i ++) {
       
$t [] = new Entity\T ( $my );
    }
}
foreach (
$t as $item){
   
$item->start();
}
t.class.php
<?php
class T extends \Thread{
    private
$my;
    public function
__construct($my){
       
$this->my = $my;
    }
    public function
run(){
       
$this->my->draw("120");
    }
}
my.class.php
<?php
class My extends Thread{
    private
$balance;
    public function
__construct($balance){
       
$this->balance = $balance;
    }
    public function
draw($cost){
       
$this->lock();
        if(
$this->balance >= $cost){
           
usleep(500);
           
$this->balance -= $cost;
            echo
Thread::getCurrentThreadId() . "__get__${cost},now the balance is:{$this->balance}<br/>";
        }
        else
            echo
Thread::getCurrentThreadId() . "__get fail__,now the balance is :{$this->balance}<br/>";
       
$this->unlock();
    }
}