【发布时间】:2012-09-11 16:29:02
【问题描述】:
如何使 PHP 中的函数同步,从而不会同时执行相同的函数?第二个用户必须等到第一个用户完成该功能。然后第二个用户可以执行该功能。
谢谢
【问题讨论】:
标签: php synchronization synchronized
如何使 PHP 中的函数同步,从而不会同时执行相同的函数?第二个用户必须等到第一个用户完成该功能。然后第二个用户可以执行该功能。
谢谢
【问题讨论】:
标签: php synchronization synchronized
【讨论】:
这基本上归结为在某个函数被锁定并且在第一个调用者从该函数返回之前无法执行的地方设置一个标志。 这可以通过多种方式完成:
在编写并发应用程序时,请始终注意竞争条件和死锁!
更新 使用信号量(未测试):
<?php
define('SEM_KEY', 1000);
function noconcurrency() {
$semRes = sem_get(SEM_KEY, 1, 0666, 0); // get the resource for the semaphore
if(sem_acquire($semRes)) { // try to acquire the semaphore. this function will block until the sem will be available
// do the work
sem_release($semRes); // release the semaphore so other process can use it
}
}
PHP 需要在编译时支持 sysvsem 才能使用 sem_* 函数
这里有一个在 PHP 中使用信号量的更深入的教程:
【讨论】:
您正在寻找Semaphore
请记住,使用信号量(或任何其他阻塞机制)可能会产生严重的性能问题,因为在信号量启动时无法处理请求。
【讨论】:
在我的头顶上:
但不知何故,我认为您正在尝试做的是“错误的”,可以通过另一种方式实现。如果你能说得更详细一些会有所帮助
编辑:不知道php信号量,上面的答案会更快。
【讨论】:
isFunctionRunning 和 think读取相同的 0 > 他们是第一个。这就是为什么 => 信号量。