PHP没有等待sem_acquire?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP没有等待sem_acquire?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
不是特定的代码问题,而是更多的一般编码问题.我正在尝试在工作项目中使用信号量来限制可以同时访问某些进程的用户数.

从我的理解如下:

$iKey = ftock($sSomeFileLocation,'sOneCharacterString'); //Generate the key
if($SEM_id = sem_get($iKey)){                            //1 user Allowed
    if(sem_acquire($sem_id)){
        //Do the limITed PRocess here
        sem_release($sem_id);
    }
}

在这里看到的问题是,如果已经有一个用户拥有信号量密钥,那么下一个用户只是等到第一个用户完成而不是仅仅是故障.任何人都知道如果达到max_acquire号码,sem_acquire(或类似的)将返回false?

谢谢

解决方法

不,根据PHP使用的实现,这是不可能的.

根据semop() man page,它应该能够在某处获取IPC_NowaiT标志,但它看起来不像PHP实现.

实际上,看一下the PHP source code for the sysvsem package,你可以清楚地看到它会继续阻塞,即使信号中断被阻塞的过程(第320行).虽然这可能不是最佳的,但只要您了解其局限性就可以了.

就您的使用情况而言,可能还有其他实现(例如针对内存文件系统的文件锁定),这对大多数用例来说都是一样好,并且能够完全满足您的需求……

脚本宝典总结

以上是脚本宝典为你收集整理的PHP没有等待sem_acquire?全部内容,希望文章能够帮你解决PHP没有等待sem_acquire?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。