V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
meloncrashed
V2EX  ›  Linux

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

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

    每次 reader 读取的是一个完整时间嘛? 如果不是 需要什么措施保证读取的完整性。
    meloncrashed
        7
    meloncrashed  
    OP
       2015-11-19 14:59:26 +08:00 via iPhone
    如何防止当正在写入时,发生读取的情况出现。
    zlbruce
        8
    zlbruce  
       2015-11-19 15:02:49 +08:00   ❤️ 2
    man lockf
    kjj98709
        9
    kjj98709  
       2015-11-19 17:32:47 +08:00
    加锁
    martifact
        10
    martifact  
       2015-11-19 18:27:42 +08:00
    可能有信号中断,所以保证不了。写操作锁 inode ,是原子的,写时读是什么机制就不知道了。
    shakoon
        11
    shakoon  
       2015-11-19 19:00:17 +08:00
    操作系统会限制你不能有多个进程同时以写入 /追加方式打开一个文件的吧,所以我觉得楼主的问题不成立。
    如果一个进程以写入 /追加方式打开文件,其他进程以读取方式打开,通常情况下无论前者对文件做了什么编辑,后者都获取不到的。在打开文件时文件全部内容就已经被读入内存了,后者只会从内存中进行读取。所以某些编辑器可以设置在编辑巨型文件时不使用内存,以加快加载效率。
    firemiles
        12
    firemiles  
       2015-11-19 20:49:58 +08:00
    @shakoon linux 是允许多个写的, windows 不行
    yuriko
        13
    yuriko  
       2015-11-20 10:06:35 +08:00
    @shakoon 你那个是内存影射的逻辑罢了,而且不会是全文件的,不然大点的文件得跪
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3280 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 13:11 · PVG 21:11 · LAX 06:11 · JFK 09:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.