需求:某的进程里有多个线程不定时读取一个文件(只读取),想要在外部修改此文件(比如通过记事本打开,修改内容并保存),让线程可以读取到修改后的文件。
问题:要如何实现互斥,即线程对该文件的读取和记事本对该文件的修改要互不影响,线程只读取文件,线程之间是不是就可以不用考虑互斥了,只做记事本和线程之间的互斥,需要做进程间互斥吗,记事本独占用文件的时间要尽量短,尽量减少对读取线程的阻塞。
把互斥的事情放到程序里面做。
也就是说,读取和修改作为一个专门的功能,限制同一个文件不允许同时读取多次,需要操作已读取的文件时直接操作内存中已读取到的内容,然后统一保存。当程序需要修改文件时,调用读取和修改文件的功能统一处理。
######回复 @testUser7_7 : 读文件的程序不能修改,而修改文件是手动做的,也就是说跟读文件的程序无法共用一个入口或者一个锁。这种情况下读文件应该是没有办法获取到手动的修改情况的,所以做不到吧######读文件的线程不能动,修改文件是要用记事本修改(即在程序外面手动修改,实现不停止读取线程的情况下,动态修改文件内容,让线程可以读取到修改后的内容),不是在程序里面修改文件。而且这些读取线程之间没有限制,可以同时读取文件,只是想要让“读取”和“修改”这两个动作互斥。######copyonwrite 具体请看cool shell######思路是可以,但是这里的公共资源不是内存变量,而是磁盘上的一个文件,每次修改就创建一个文件的副本,副本名字怎么维护呢(修改一次名字+1?),读取线程要怎么找到这个新的文件######我的意思是copyonwrite是核心思路,一致行性可以通过在修改的时候禁止读取解决######具体点,我不知道文件名这块要怎么维护,线程要怎么知道读哪个文件,然后旧的文件要用户手动删除吗版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。