首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一般的共享资源锁定技术-羊群是解决方案吗?

一般的共享资源锁定技术-羊群是解决方案吗?
EN

Unix & Linux用户
提问于 2014-12-18 22:50:52
回答 1查看 4.1K关注 0票数 3

我需要实现一个锁定方案,以便多个进程可以共享一组资源,而“特殊”进程可以获得对这组资源的独占访问。

这些是批处理过程:在每个事务开始时,我建议获取适当的锁,并在结束时,无限地释放它。

flock具有我需要的语义(LOCK_SH、LOCK_EX、LOCK_UN)。我用Perl Flock.pm和一个虚拟文件进行了实验,该文件的唯一目的是被flock所反对。我对它的速度有多慢感到有点惊讶,而且从“顶部”的位置看也不明显。(它不受CPU限制,即使正在执行的循环只包含LOCK_SH和LOCK_UN。)我不想对过早的优化感到内疚,但我想知道flock是否是管理*nix中共享资源的共享和独占访问的标准方法,即使共享资源不是实际的文件,或者是否还有其他我不知道的工具。

更新:@msw正确地猜到,我(无意中)锁定了NFS文件,而不是本地文件。使用本地文件完全清除了我所看到的性能打击。我将这个问题留待进一步了解“文件锁定”是否真的是解决这类问题的最佳方法。

EN

回答 1

Unix & Linux用户

发布于 2014-12-18 23:36:05

Unix有大量的锁定系统。您找到的是名为BSD文件锁定的方法,但是有一些其他文件锁定方法。除此之外,还有信号量信号量互斥等。

至于你的直接问题,是的,这是一个非常好的方法。别担心要花多少时间。从本质上说,锁定是一种高开销的活动。这就是为什么在设计无锁机制时付出了这么大的努力。

关于你的计划,唯一困扰我的是你必须创建的虚拟文件。可能有一种更简单的方法来达到您想要的目的:mkdir(2)。调用是原子的,当目录已经存在时,您将得到一个错误。相比之下,open(2)只有原子与O_EXCL,并不是到处都有。当可用时,它可能无法按预期工作,这可能是因为您正在使用NFSv2,或者因为您还没有启用NFS文件锁定守护进程

mkdir方法曾经的好处是,您可以通过mkdir(1)在shell脚本中完成它。我看到您正在使用Perl,但在这种情况下,它是一个内置函数,而不是外部模块。

另一件好的事情是,它将工作在NFS没有任何特别的帮助。您不能创建目录两次。

mkdir()方法的唯一问题是无法让它等待现有目录消失。也就是说,它不是阻塞锁操作。我建议您用计时器将其包装起来,以便争取锁的进程大部分时间都处于休眠状态。我建议您让每个进程等待一段随机的加窗时间。例如,在100到200毫秒之间,通过usleep(3)。这将创建一种形式的自旋锁

票数 6
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/174955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档