V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xingge
V2EX  ›  程序员

windows 平台 c++如何简单安全的实现多进程多线程读写同一个文件

  •  
  •   xingge · 2021-04-12 21:32:32 +08:00 · 2409 次点击
    这是一个创建于 1080 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,请教一下各位大佬 多进程多线程同时读写同一个 json 配置文件 怎么样才能既简单又安全的读写,保证读写成功,配置文件不丢失不错乱 或者有这方面的轮子吗?谢谢😉

    12 条回复    2021-04-13 16:36:05 +08:00
    ysc3839
        1
    ysc3839  
       2021-04-12 21:47:38 +08:00
    h82258652
        2
    h82258652  
       2021-04-12 21:53:39 +08:00
    1 楼的方法没试过,我倒是想到可以用 Mutex 做,但好像性能一般般。
    zhuangzhuang1988
        3
    zhuangzhuang1988  
       2021-04-12 21:56:04 +08:00
    命名内核对象就可以了
    Jirajine
        4
    Jirajine  
       2021-04-12 21:56:54 +08:00 via Android
    1. 加锁,没什么好说的。
    2. 用一个专门的 worker 进程 /线程管理,其他进程 /线程把操作(增删改查)通过队列发给该进程 /线程由其进行实际操作。
    mogg
        5
    mogg  
       2021-04-12 21:57:32 +08:00
    最简单的思路是内存里管这个配置对象,启动时导入,然后用一个专门的线程去把这个对象存到 JSON 文件里
    raaaaaar
        6
    raaaaaar  
       2021-04-12 22:41:10 +08:00 via Android
    直接扔数据库里得了,配置文件读写也不会太频繁吧
    xingge
        7
    xingge  
    OP
       2021-04-13 07:17:22 +08:00 via Android
    谢谢大家
    JerryV2
        8
    JerryV2  
       2021-04-13 07:41:53 +08:00
    Slim 读 /写锁专门干这个的,了解一下
    goobai
        9
    goobai  
       2021-04-13 11:49:06 +08:00 via Android
    读不存在,主要是写吧! c#有个进程锁 mutex
    magicfuzzx
        10
    magicfuzzx  
       2021-04-13 12:06:12 +08:00
    BOOL LockFile(
    HANDLE hFile,
    DWORD dwFileOffsetLow,
    DWORD dwFileOffsetHigh,
    DWORD nNumberOfBytesToLockLow,
    DWORD nNumberOfBytesToLockHigh
    );
    pkupyx
        11
    pkupyx  
       2021-04-13 13:45:56 +08:00
    如果想要一只以 rw open 然后多人读写,把这个文件读写模块封装一下,对外暴露同步写接口,量大还能整个 buffer 异步。然后通过业务逻辑保证不把配置写错乱。
    nvioue
        12
    nvioue  
       2021-04-13 16:36:05 +08:00
    你先说一下为什么要多进程多线程读写同一个文件?????? 我做后台的, 从来不会让多个 server 同时去连 db 的..
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3240 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 11:31 · PVG 19:31 · LAX 04:31 · JFK 07:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.