PHP 线程中的同步方法由 2 个不同的用户调用


Synchronised method in PHP Thread called by 2 different users

这更像是一个一般性的问题,因为我不能具体说明代码片段,所以如果可能的话,请以一般的方式回答。

如果我创建一个 Thread 扩展类,并定义一个同步方法,当 2 个访问者创建该类的新实例并调用同步方法时,它会起作用还是仅在同一用户调用 2 次时才有效?

我试图实现的是:每个访问者打开一个线程,以便与普通脚本并行运行一系列命令,但我不希望该命令序列由更多访问者同时运行。

我知道这个问题不是太具体,但我没有找到任何文档来清楚地解释这一点。

注意:我来自Java,所以有些术语对于PHP来说可能是错误的。

编辑:"详细说明你说"打开一个线程,以便命令序列与普通脚本并行运行"和"我不希望该命令序列在同一时间由更多访问者运行"时的意思。'.

  • 2个不同的访客同时访问script.php
  • script.php里面有:
    • $commands = new <class that extends Thread>();
    • $commands-><synchronised method>();
  • 访客
  • 2 等到访客 1 的$commands-><synchronised method>();终止,然后运行他的$commands-><synchronised method>();

这就是目标。

PHP的Threaded::synchronized实现了类似于Java synchronized的功能,并在此处进行了描述。

您将在 PHP 中遇到的问题是,您尝试让两个会话对同一对象执行相同的同步方法,而普通 PHP 不支持在会话之间共享内存中的对象。您会注意到,在示例脚本中,

$commands = new <class that extends Thread>();
$commands-><synchronised method>();

每个脚本调用都会创建一个新对象。

您可以通过使用外部资源来控制方法中的访问来实现类似的东西,例如锁定文件(可能是最快和最不优雅的方式)。根据软件堆栈中的其他内容,您可能能够将互斥锁存储在数据库或正在使用的其他存储中。