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

时间:2016-07-18 13:48:46

标签: php multithreading concurrency

这是一个更普遍的问题,因为我不能具体使用代码段,所以请尽可能以一般方式回答。

如果我创建一个Thread扩展类,并且我定义了一个synchronized方法,当2个访问者创建该类的新实例并调用synchronized方法时,它是否会起作用,或者只有当它被调用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>();

这是目标。

1 个答案:

答案 0 :(得分:0)

PHP Threaded::synchronized实现类似于Java synchronized的功能,并描述为here

你在PHP中遇到的问题是你试图让两个会话在同一个对象上执行相同的同步方法,并且vanilla PHP不支持共享对象 - 会话间的记忆。您将在示例脚本中注意到

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

每个脚本调用正在创建一个新对象

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