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

2015 年 11 月 19 日
 meloncrashed
10012 次点击
所在节点    Linux
13 条回复
meloncrashed
2015 年 11 月 19 日
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 日
三程序各自独立循环运行
meloncrashed
2015 年 11 月 19 日
写入时是覆盖写入
lonelygo
2015 年 11 月 19 日
那就要考虑时序了吧,在设计控制系统时,甚至需要考虑时 0➡️1 时候的“上升沿”的问题。
问题是:为何要双写?
yuelang85
2015 年 11 月 19 日
会,需要加锁
meloncrashed
2015 年 11 月 19 日
@lonelygo
@yuelang85
那么如果 p1 不停覆盖写入当前时间到 file1 ,然后用 reader 不断读取 file1 。

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

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

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

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

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

© 2021 V2EX