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

2021-04-12 21:32:32 +08:00
 xingge

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

2473 次点击
所在节点    程序员
12 条回复
ysc3839
2021-04-12 21:47:38 +08:00
h82258652
2021-04-12 21:53:39 +08:00
1 楼的方法没试过,我倒是想到可以用 Mutex 做,但好像性能一般般。
zhuangzhuang1988
2021-04-12 21:56:04 +08:00
命名内核对象就可以了
Jirajine
2021-04-12 21:56:54 +08:00
1. 加锁,没什么好说的。
2. 用一个专门的 worker 进程 /线程管理,其他进程 /线程把操作(增删改查)通过队列发给该进程 /线程由其进行实际操作。
mogg
2021-04-12 21:57:32 +08:00
最简单的思路是内存里管这个配置对象,启动时导入,然后用一个专门的线程去把这个对象存到 JSON 文件里
raaaaaar
2021-04-12 22:41:10 +08:00
直接扔数据库里得了,配置文件读写也不会太频繁吧
xingge
2021-04-13 07:17:22 +08:00
谢谢大家
JerryV2
2021-04-13 07:41:53 +08:00
Slim 读 /写锁专门干这个的,了解一下
goobai
2021-04-13 11:49:06 +08:00
读不存在,主要是写吧! c#有个进程锁 mutex
magicfuzzx
2021-04-13 12:06:12 +08:00
BOOL LockFile(
HANDLE hFile,
DWORD dwFileOffsetLow,
DWORD dwFileOffsetHigh,
DWORD nNumberOfBytesToLockLow,
DWORD nNumberOfBytesToLockHigh
);
pkupyx
2021-04-13 13:45:56 +08:00
如果想要一只以 rw open 然后多人读写,把这个文件读写模块封装一下,对外暴露同步写接口,量大还能整个 buffer 异步。然后通过业务逻辑保证不把配置写错乱。
nvioue
2021-04-13 16:36:05 +08:00
你先说一下为什么要多进程多线程读写同一个文件?????? 我做后台的, 从来不会让多个 server 同时去连 db 的..

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/770194

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX