【发布时间】:2014-10-08 05:20:44
【问题描述】:
我在具有多个线程但只有一个进程的环境中使用带有事务的伯克利数据库。
由于我只有一个进程,我想缓存一些记录中数据的解析表示,这样我就不必每次访问它时都不必要地重新解析它,但如果我这样做在访问缓存数据时天真地没有发出任何数据库操作,我显然不会正确地遵循锁定协议,导致事务不能正确地相互隔离。
我显然可以通过在我打算在事务期间使用的记录上运行get 操作来解决这个问题,但这在 I/O 方面似乎没有必要,而且也很丑陋,因为我实际上不需要重新- 读取数据。有没有办法锁定“好像”我已经发出了get 操作?
同样,有没有办法为put 操作执行相应的写锁,因为我需要在修改缓存数据之前执行它们(这需要在序列化数据之前完成,以便实际put它)?
【问题讨论】:
标签: language-agnostic locking berkeley-db