使用PHP(和APC)的Mutex类(竞争条件)?

时间:2012-12-11 21:44:29

标签: php mutex race-condition

我需要互斥一些手术。在我的服务器上安装了APC。

是否有任何获得批准的类别来获取和发布互斥锁?如果已有“官方”解决方案,我会避免重新发明轮子。

请注意,我知道我可以使用flock,但我不想回到文件系统来获取互斥锁

类似的东西:

$m = new Mutex;
$m->lock();
  //> Do stuff
$m->unlock();

3 个答案:

答案 0 :(得分:1)

PHP的更高版本内置了Mutex类。如果您使用的是* nix系统,还可以在文档中查找“信号量函数”。

答案 1 :(得分:1)

您可能想尝试我的Mutex implementation in php。它支持几个适配器 - flock,memcache,mysql。目前没有apc实现,因为无法在多个Web服务器上使用它 - 但您可能总是轻松添加它并发送拉取请求。

https://github.com/arvenil/ninja-mutex

答案 2 :(得分:0)

使用APC实现互斥库通常是一种诽谤。 Mutex / Locks最有用的应用是分布式环境和多实例......但APC是机器本地的。

要在分布式数据库中实现可靠的多实例互斥信令,您需要使用FileSystem(S3)或共享REDIS或MEMCACHED服务(数据库可以工作但速度较慢)。

不建议在分布式环境中使用Ninja Mutex。

Istead使用此库:https://github.com/cheprasov/php-redis-lock 它经过我的测试,适用于多个PHP-FPM实例,Redis和MongoDB集群。

如果您想了解更多信息,请阅读官方redis文档: https://redis.io/topics/distlock