文字

Threaded::notify

(PECL pthreads >= 2.0.0)

Threaded::notifySynchronization

说明

public boolean Threaded::notify ( void )

向对象发送唤醒通知

参数

此函数没有参数。

返回值

布尔值,表示操作是否成功

范例

Example #1 等待和唤醒

<?php
class  My  extends  Thread  {
    public function 
run () {
        

        
$this -> synchronized (function( $thread ){
            if (!
$thread -> done )
                
$thread -> wait ();
        }, 
$this );
    }
}
$my  = new  My ();
$my -> start ();

$my -> synchronized (function( $thread ){
    
$thread -> done  true ;
    
$thread -> notify ();
}, 
$my );
var_dump ( $my -> join ());
?>

以上例程会输出:

bool(true)

用户评论:

[#1] cottton at i-stats dot net [2014-11-18 01:34:31]

Seems like some operators dont work.
f.e. $thread->array[] = 1;  fails

a simple test:
<?php
class My extends Thread
{
    public
        
$array = array('default val 1''default val 2'),
        
$msg 'default',
        
$stop false;

    public function 
run()
    {
        while(
true)
        {
            echo 
$this->msg PHP_EOL;
            if(
count($this->array) > 0){
                foreach(
$this->array as $val){
                    
var_dump($val);
                }
                
$this->array = array();
            }
            

            
$this->synchronized(
                function(
$thread){
                    if(
count($this->array) < 1){
                        
$thread->wait();
                    }
                },
                
$this
            
);
            echo 
PHP_EOL;
            if(
$this->stop){
                break;
            }
        } 
// while
    
}
}
$my = new My();
$my->start();

sleep(1); // wait a bit

// test 1 - $thread->array[] = 1;
$my->synchronized(
    function(
$thread){
        
$thread->msg 'test 1';
        
$thread->array[] = 1;
        
$thread->notify();
    },
    
$my
);

sleep(1); // wait a bit

// test 2 - array_push($thread->array, 2);
$my->synchronized(
    function(
$thread){
        
$thread->msg 'test 2';
        
array_push($thread->array2);
        
$thread->notify();
    },
    
$my
);

sleep(1); // wait a bit

// test 3 - array_push($thread->array, 2);
$my->synchronized(
    function(
$thread){
        
$thread->msg 'test 3';
        
$new = array(3);
        
$thread->array array_merge($thread->array$new);
        
$thread->notify();
    },
    
$my
);

sleep(1); // wait a bit

$my->stop true;
?>

out:
default
string(13) "default val 1"
string(13) "default val 2"

test 1

test 2

test 3
int(3)

so in this case only array_merge() worked.

上一篇: 下一篇: