牛牛在线工具

Threaded::synchronized()

收录 8868 个 PHP 函数,含用途说明与用法示例。

Threaded::synchronized()

在多线程环境中同步访问共享对象

函数:Threaded::synchronized() 适用版本:PHP 7+ 用法:Threaded::synchronized()函数用于在多线程环境中同步访问共享对象。它接受一个回调函数作为参数,并在执行该回调函数期间锁定共享对象,以确保只有一个线程可以访问。 语法: public Threaded::synchronized ( callable $block , mixed ...$args ) : mixed 参数: $block:一个回调函数,用于在同步块中执行的代码。 $args:可选的参数,传递给回调函数。 返回值:回调函数的返回值。 示例: <?php class SharedData extends Threaded { public $counter = 0; } $data = new SharedData(); $worker = new class($data) extends Thread { private $data; public function __construct(SharedData $data) { $this->data = $data; } public function run() { $this->data->synchronized(function($data) { // 在同步块中访问共享对象 $data->counter++; echo "Thread " . $this->getThreadId() . " incremented the counter to " . $data->counter . PHP_EOL; }, $this->data); } }; $worker->start(); $worker->join(); echo "Counter value after synchronization: " . $data->counter . PHP_EOL; ?> 输出: Thread 2 incremented the counter to 1 Counter value after synchronization: 1 在上面的示例中,我们创建了一个共享数据对象SharedData,其中包含一个计数器counter。然后,我们创建了一个继承自Thread的匿名类$worker,它接受SharedData对象作为构造函数的参数。 在run()方法中,我们使用synchronized()函数来确保在访问共享对象$data时进行同步。在同步块中,我们将计数器递增,并打印线程ID和递增后的计数器值。 最后,我们启动线程并等待它完成。在同步完成后,我们打印出最终的计数器值。 需要注意的是,synchronized()函数的参数$block是一个回调函数,可以接受其他参数。在示例中,我们将$data作为额外的参数传递给回调函数,以便在同步块中访问共享对象。