代码之家  ›  专栏  ›  技术社区  ›  Andreas Zita

使用多个并发读卡器对文件进行原子更新?

  •  0
  • Andreas Zita  · 技术社区  · 8 年前

    我需要允许多个并发线程(在一个进程中)以线程安全的方式(随机)读取文件,而另一个线程正在(随机)写入它。文件流。如果我没弄错的话,同花顺似乎不是原子的,那么像这样的情况是如何解决的呢?我是否需要包装我的流,并围绕真正的流实现某种ReadersWriter锁?有可能写一些无锁的东西吗?

    中是否有任何解决方案。网已经错过了吗?内存映射文件似乎具有与没有原子刷新相同的限制。写和读都是线程安全的,但我认为多个写不会自动刷新?我不能使用NTFS,所以TxF不是一个选项。

    使现代化 :我尝试编写一个自定义流包装器,该包装器将所有写入内容保留在未提交缓冲区列表中,然后在所有读取流上以原子方式交换该缓冲区,以便它们在刷新到基础流之前立即获得新版本。但是代码变得很混乱,我仍然需要到处锁定,所以我放弃了这个想法。我想我会尝试一种更基本的方法,使用读写器锁定。我刚注意到FileStream。锁,但它似乎抛出争用异常,而不是等待,但我想它更适合于跨进程锁定。我只是对单进程锁定感兴趣,所以我想我可以做一个更奇特的解决方案。

    更新2 :我在单个流上使用了锁定方法,同时锁定读写器,但不会引发争用异常,而是使用自旋等待,直到释放锁。与使用多个读取流(并允许并发读卡器)相比,尝试了一些性能测试,但多流版本的性能仅得到了很小的提升。额外的代码复杂性使其不值得。

    0 回复  |  直到 8 年前
    推荐文章