php[world] 2019 — 25 years of PHP

Threaded::lock

(PECL pthreads < 3.0.0)

Threaded::lockSynchronisation

Avertissement

Cette méthode a été supprimée dans pthreads v3. La méthode Threaded::synchronized() doit maintenant être utilisée.

Description

public Threaded::lock ( void ) : bool

Verouille la table des propriétés de la table de l'objet référencé

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Un booléen indiquant le succès

Exemples

Exemple #1 Verouille les propriétés de l'objet

<?php
class My extends Thread {
    public function 
run() {
        
var_dump($this->lock());
        
/** personne ne peut lire, ni écrire **/
        
var_dump($this->unlock());
        
/** reprise de la lecture et de l'écriture pour tous les autres contextes */
    
}
}
$my = new My();
$my->start();
?>

L'exemple ci-dessus va afficher :

bool(true)
bool(true)

add a note add a note

User Contributed Notes 1 note

up
1
312036773 at qq dot com
3 years ago
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();
    }
}
To Top