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