我们的应用程序要求在访问/修改资源之前需要将其锁定,以避免并发操作并保持完整性。由于对该资源进行一系列操作,我们决定实现应用程序级别的锁定概念,所有访问该资源的组件都必须遵守。
请注意,由于多个进程会访问/修改资源,因此同步成为了负担。这也是选择应用程序级锁定的原因之一。
我们考虑实现应用程序级锁定的方法之一是在数据库表中插入和更新条目,该表将具有资源名称、锁定类型(读取锁定、写入锁定或完全排他锁定)以及获取锁定的过程的信息等列。 我们选择数据库表作为选项,因为它是所有访问资源的进程集中的唯一组件,但如果有人能够调查其他可能性,那么这将很有帮助。
使用数据库方法的另一个问题是实现必须使用悲观锁定。(我们的应用程序使用Oracle作为我们的数据库服务器)
此问题的目的是探索实施应用程序级锁定的各种方法。
编辑1:
我提到数据库方法必须实现悲观锁定的原因是:
1.通过用户动态添加访问/修改的各种应用程序组件的资源,因此在这个数据库中始终插入它们的条目将非常难看。
2.即使在此表中添加了资源条目,仍会出现删除这些条目的问题。
乐观锁定方法可能很好,但我无法想出如何实现它。
编辑2:
添加有关锁定类型的详细信息
我已更新上述问题陈述以指定3种锁定类型:
1.读锁定-如果所有其他锁定都是读取或写入,则可以获取该锁定
2.写独占锁-如果所有其他锁定都是读取,则可以获取该锁定
3.完全排他锁定-如果此资源上没有锁,则可以获取该锁定
请注意,由于多个进程会访问/修改资源,因此同步成为了负担。这也是选择应用程序级锁定的原因之一。
我们考虑实现应用程序级锁定的方法之一是在数据库表中插入和更新条目,该表将具有资源名称、锁定类型(读取锁定、写入锁定或完全排他锁定)以及获取锁定的过程的信息等列。 我们选择数据库表作为选项,因为它是所有访问资源的进程集中的唯一组件,但如果有人能够调查其他可能性,那么这将很有帮助。
使用数据库方法的另一个问题是实现必须使用悲观锁定。(我们的应用程序使用Oracle作为我们的数据库服务器)
此问题的目的是探索实施应用程序级锁定的各种方法。
编辑1:
我提到数据库方法必须实现悲观锁定的原因是:
1.通过用户动态添加访问/修改的各种应用程序组件的资源,因此在这个数据库中始终插入它们的条目将非常难看。
2.即使在此表中添加了资源条目,仍会出现删除这些条目的问题。
乐观锁定方法可能很好,但我无法想出如何实现它。
编辑2:
添加有关锁定类型的详细信息
我已更新上述问题陈述以指定3种锁定类型:
1.读锁定-如果所有其他锁定都是读取或写入,则可以获取该锁定
2.写独占锁-如果所有其他锁定都是读取,则可以获取该锁定
3.完全排他锁定-如果此资源上没有锁,则可以获取该锁定