maf*_*afu 4 filesystems file-io transactions atomicity
许多常见的文件系统不提供原子操作,但是在某些情况下以原子方式写入文件非常重要。我试图为这个问题提出解决方案。
我做了以下假设:
这就留下了以下问题:写入文件时,程序可能会中断,并且文件中只剩下部分内容要写入。
我提出以下过程:
新建文件和备份文件与原始文件是有区别的(例如,它们的前缀可以不同,或者可以在同一卷上的单独目录中)。同时,它们的名称应直接映射到相应的原始名称(例如,只需使用相同的文件名)。
但是,这还不能使操作原子化。该过程可能会中断步骤1、2、3或4:
使用先前的假设2和3,程序必须在崩溃后重新启动。在启动过程中,它应执行以下恢复检查:
仅使用原子操作的恢复过程本身将在中断后继续从中断处继续进行。
我相信这个想法可以确保对单个程序进行原子写入。这些问题仍然存在:
可以通过使用策略(例如,检查其他实例,并拒绝对其他用户的目录访问)来解决这些问题(先前的假设未包括在内)。
最后,我的问题是:这样做有意义吗,或者过程中存在缺陷?是否有任何问题阻止这种方法在实践中使用?
小智 5
您应该假设只有一件事,重命名文件是原子操作
因此,执行以下步骤将确保更正(至少在像OS这样的unix上)
这样,如果应用程序在重启时崩溃,则无需额外的代码即可获取旧内容或新内容。
归档时间: |
|
查看次数: |
1576 次 |
最近记录: |