linux – 通用共享资源锁定技术 – 是不是解决了这个问题?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – 通用共享资源锁定技术 – 是不是解决了这个问题?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1753字,纯文字阅读大概需要3分钟。
内容图文
![linux – 通用共享资源锁定技术 – 是不是解决了这个问题?](/upload/InfoBanner/zyjiaocheng/957/e854688b7165488f8125fd5a67c35279.jpg)
我需要实现一个锁定方案,以便多个进程可以共享一组资源,而“特殊”进程可以获得对该组资源的独占访问.
这些是批处理过程:在每次交易开始时,我建议获得适当的锁,并在最后无限制地发布它.
flock有我需要的语义(LOCK_SH,LOCK_EX,LOCK_UN).我使用Perl Flock.pm和一个虚拟文件进行了实验,它的唯一目的是为了防止它.我对它的速度有点感到有些惊讶,并且从花费时间的“顶部”来看并不明显. (它不受CPU限制,即使执行的循环只包含LOCK_SH和LOCK_UN.)我不想对过早优化感到内疚,但我想知道flock是否是管理共享的标准方法并且对* nix中的共享资源进行独占访问,即使共享资源不是实际文件,或者是否还有其他我不知道的工具.
更新:@msw正确猜到我(无意中)锁定了NFS文件而不是本地文件.使用本地文件完全清除了我看到的性能损失.我打开这个问题,以了解更多关于“文件锁定”是否真的是解决这类问题的最佳方法.
解决方法:
Unix有很多锁定系统.您找到的那个称为BSD文件锁定,但有other个文件锁定方法.最重要的是,你还有semaphores,mutexes等等.
至于你的直接问题,是的,这是一个非常好的方式.不要担心花费的时间.从本质上讲,锁定是一项高开销活动.这就是为什么在设计lock-free机制方面投入了大量精力的原因.
唯一让我误解你的计划的是你必须创建的虚拟文件.可能有一种更简单的方法可以达到你想要的结果:mkdir(2).该调用是原子的,当目录已存在时,您会收到错误.相比之下,open(2)是only atomic with O_EXCL,这在任何地方都不可用.如果可用,它可能无法正常工作,因为您使用的是NFSv2,或者因为您尚未启用NFS file locking daemon.
关于mkdir方法的好处是你可以通过mkdir(1)在shell脚本中完成它.我看到你正在使用Perl,但在这种情况下,它是一个内置函数,而不是外部模块.
另一个好处是它可以在没有任何特殊帮助的情况下在NFS上运行.您无法两次创建目录.
mkdir()方法的唯一问题是没有办法让它等待现有目录消失.也就是说,它不是阻塞锁定操作.我建议你用一个计时器包装它,这样争夺锁的进程大部分时间都会睡着.我建议你让每个进程等待一段随机窗口的时间.例如,在100到200毫秒之间,通过usleep(3).这将创建一个spinlock的形式.
内容总结
以上是互联网集市为您收集整理的linux – 通用共享资源锁定技术 – 是不是解决了这个问题?全部内容,希望文章能够帮你解决linux – 通用共享资源锁定技术 – 是不是解决了这个问题?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。