我正在进行一项学术研究,试图开发一种有助于实现细粒度锁定功能的编程工具,用于维护树状数据结构的并发程序。
例如,程序员可能会编写一些函数来接收树根节点并修改树(通过遍历某些路由并添加/删除节点),该工具将帮助他找到代码中的哪些节点应该被锁定和它们可以在哪里被释放——所以这些函数可以在同一棵树上同时执行。
我正在寻找一些现实生活中的代码示例,其中使用了这种细粒度的锁定,或者它可以用于更好的性能但程序员懒得实现它(例如,他在函数期间锁定了整个树-调用而不释放无用的节点)。
我阅读了使用树形数据库的 JCR 和 Jackrabbit,并找到了一篇解释如何在 JCR 中锁定节点的文章(但没有示例): http ://www.day.com/specs/jcr/2.0/17_Locking .html
我在数据库方面的背景非常小,我不完全理解在 Jackrabbit 数据库和并发方面什么是允许的,什么是不允许的。不允许从 2 个线程访问同一个节点,但是不同的存储库呢?如果 2 个不同的客户端尝试访问同一个节点会发生什么(例如,一个尝试删除它,另一个尝试修改它 - session.save() 会失败吗?)。
谢谢,奥伦