我正在编写一个应用程序,它必须能够处理对它的许多并发访问,无论是通过线程还是通过进程。因此,不应对此应用互斥锁或锁。
为了使锁的使用降到最低,我将文件设计为“仅附加”,因此所有数据首先附加到磁盘,然后指向它已更新的信息的地址被更改指新的。所以我只需要实现一个小锁系统来更改这个 int 以便它引用新地址。最好的方法是什么?
我在考虑可能在地址前放置一个标志,当它被设置时,读者将使用自旋锁直到它被释放。但我担心它根本不是原子的,是吗?例如
- 阅读器读取标志,并且未设置
- 同时,写入者写入标志并更改 int 的值
- 读者可能会读到不一致的值!
我正在寻找锁定技术,但我发现的只是线程锁定技术,或者锁定整个文件,而不是字段。难道不能这样做吗?仅附加数据库如何处理这个问题?
编辑:我正在研究仅附加数据库(couchDB)是如何做到的,似乎他们只使用一个线程来序列化对文件的写入。这是否意味着如果不使用文件系统锁锁定整个文件,就不可能像 sqlite 一样使它们可嵌入?
谢谢!考埃