开发者社区> 问答> 正文

如何在外部修改一个被多个线程读取的文件:报错

需求:某的进程里有多个线程不定时读取一个文件(只读取),想要在外部修改此文件(比如通过记事本打开,修改内容并保存),让线程可以读取到修改后的文件。

问题:要如何实现互斥,即线程对该文件的读取和记事本对该文件的修改要互不影响,线程只读取文件,线程之间是不是就可以不用考虑互斥了,只做记事本和线程之间的互斥,需要做进程间互斥吗,记事本独占用文件的时间要尽量短,尽量减少对读取线程的阻塞。

展开
收起
kun坤 2020-06-07 21:44:32 482 0
1 条回答
写回答
取消 提交回答
  • 把互斥的事情放到程序里面做。

    也就是说,读取和修改作为一个专门的功能,限制同一个文件不允许同时读取多次,需要操作已读取的文件时直接操作内存中已读取到的内容,然后统一保存。当程序需要修改文件时,调用读取和修改文件的功能统一处理。

    ######回复 @testUser7_7 : 读文件的程序不能修改,而修改文件是手动做的,也就是说跟读文件的程序无法共用一个入口或者一个锁。这种情况下读文件应该是没有办法获取到手动的修改情况的,所以做不到吧######读文件的线程不能动,修改文件是要用记事本修改(即在程序外面手动修改,实现不停止读取线程的情况下,动态修改文件内容,让线程可以读取到修改后的内容),不是在程序里面修改文件。而且这些读取线程之间没有限制,可以同时读取文件,只是想要让“读取”和“修改”这两个动作互斥。######copyonwrite 具体请看cool shell######思路是可以,但是这里的公共资源不是内存变量,而是磁盘上的一个文件,每次修改就创建一个文件的副本,副本名字怎么维护呢(修改一次名字+1?),读取线程要怎么找到这个新的文件######我的意思是copyonwrite是核心思路,一致行性可以通过在修改的时候禁止读取解决######具体点,我不知道文件名这块要怎么维护,线程要怎么知道读哪个文件,然后旧的文件要用户手动删除吗
    2020-06-07 21:44:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
多IO线程优化版 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载