【发布时间】:2011-07-23 02:28:35
【问题描述】:
我们的应用程序中有一个要求,即在访问/修改资源之前需要锁定资源,以避免并发操作并保持完整性。由于对资源执行了一系列操作,我们决定实现一个应用程序级锁定概念,所有访问该资源的组件都必须遵守该概念。
请注意,资源将被多个进程访问/修改,因此同步成为开销。这也是选择应用级锁定的原因之一。
我们想到的实现应用程序级锁定的方法之一是在数据库表中插入和更新条目,该表将包含资源名称、锁类型等列(可能是读锁、写锁或完全排他锁)和有关获取锁的进程的信息。我们选择数据库表作为一个选项,因为它是唯一一个集中到所有访问资源的进程的组件,但是如果有人可以探索其他可能性,那将会很有帮助。
数据库方法的另一个问题是实现必须使用悲观锁定。 (我们的应用程序使用 Oracle 作为我们的数据库服务器)。
这个问题的目的是探索实现应用程序级锁定的各种方法。
编辑 1
我之所以提到数据库方法必须实现悲观锁定是因为
- 各种应用组件访问/修改的资源由用户在软件中动态添加。因此,将它们的条目也始终插入此数据库表中会很丑陋。
- 即使在此表中创建了资源条目,我们何时删除这些条目也会出现问题?
乐观锁定方法本来不错,但我想不出我们如何实现它。
编辑 2 添加锁定类型的详细信息 我已经更新了上面的问题陈述,指定有3种锁类型
- 读取锁 - 如果所有其他锁都是读取或写入的,则可以获取
- 写排他锁 - 如果所有其他锁都被读取,则可以获取
- 完全排他锁 - 如果此资源上没有锁,则可以获得
【问题讨论】:
-
您正在开发哪种应用程序(Web/GUI/CLI/等?)以及使用哪种编程语言?
-
它是一个部署在 glassfish 集群上的 Web 应用程序。该应用程序正在使用 Java 编程语言开发
标签: locking