多程序同时读写同一文件,会有冲突吗?

2015-11-19 14:36:20 +08:00
 meloncrashed
9007 次点击
所在节点    Linux
13 条回复
meloncrashed
2015-11-19 14:36:38 +08:00
p1 write 2^16 into file
p2 write 0 into file
p3 read from file
三程序一起循环, 任意时刻 p3 读取的结果只有 2^16 或 0 这两种可能嘛?会不会读取部分数据 如 2^8
meloncrashed
2015-11-19 14:37:58 +08:00
三程序各自独立循环运行
meloncrashed
2015-11-19 14:39:08 +08:00
写入时是覆盖写入
lonelygo
2015-11-19 14:42:06 +08:00
那就要考虑时序了吧,在设计控制系统时,甚至需要考虑时 0➡️1 时候的“上升沿”的问题。
问题是:为何要双写?
yuelang85
2015-11-19 14:43:34 +08:00
会,需要加锁
meloncrashed
2015-11-19 14:52:27 +08:00
@lonelygo
@yuelang85
那么如果 p1 不停覆盖写入当前时间到 file1 ,然后用 reader 不断读取 file1 。

每次 reader 读取的是一个完整时间嘛? 如果不是 需要什么措施保证读取的完整性。
meloncrashed
2015-11-19 14:59:26 +08:00
如何防止当正在写入时,发生读取的情况出现。
zlbruce
2015-11-19 15:02:49 +08:00
man lockf
kjj98709
2015-11-19 17:32:47 +08:00
加锁
martifact
2015-11-19 18:27:42 +08:00
可能有信号中断,所以保证不了。写操作锁 inode ,是原子的,写时读是什么机制就不知道了。
shakoon
2015-11-19 19:00:17 +08:00
操作系统会限制你不能有多个进程同时以写入 /追加方式打开一个文件的吧,所以我觉得楼主的问题不成立。
如果一个进程以写入 /追加方式打开文件,其他进程以读取方式打开,通常情况下无论前者对文件做了什么编辑,后者都获取不到的。在打开文件时文件全部内容就已经被读入内存了,后者只会从内存中进行读取。所以某些编辑器可以设置在编辑巨型文件时不使用内存,以加快加载效率。
firemiles
2015-11-19 20:49:58 +08:00
@shakoon linux 是允许多个写的, windows 不行
yuriko
2015-11-20 10:06:35 +08:00
@shakoon 你那个是内存影射的逻辑罢了,而且不会是全文件的,不然大点的文件得跪

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

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

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

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

© 2021 V2EX