我正在编写一个应用程序,其中可能有多个线程试图修改同一个文件。为了克服这个问题,我考虑将文件名存储在并发哈希图中,文件名<->计数并使用等待和通知,即
if(map has fileName){
map.put(fileName, map.get(fileName)++ )
wait()
}else{
map.put(fileName,1)
}
modifyFile(fileName);
{
count = map.get(fileName);
if count == 1 then map.remove(fileName)
else map.put(fileName, count-- )
notify()
}
但我不觉得上面的代码很优雅。有一个更好的方法吗?
编辑:一个简单的锁会阻塞所有线程的流程。我只是想阻止想要修改同一个文件的线程,其他线程应该不受影响