根据我对持久性编程模型的理解,正确区分易失性变量和持久性变量取决于程序员。持久变量将需要某种原子更新,以便在发生电源故障时,恢复程序可以将程序的数据清理到一致的状态。
例如,如果我将一个节点插入到具有持久内存支持程序的链表的开头,我将不得不执行以下操作:
- 使用其中的新数据创建新节点
- 将“next”指针链接到链表的当前头
- 然后更新头指针以指向新节点。
每个步骤都必须使用 undo-log 或 redo-log 执行,以帮助恢复程序保持数据的一致状态。此外,每个步骤都必须通过冲洗和栅栏来坚持。
程序员想要确定哪些变量必须在故障中幸存下来,哪些不重要,以便它们不需要开销(“日志记录”和“刷新和围栏”)。这比听起来要困难得多,并且有很多关于它的研究和工具。
现在这是我的问题。假设我对持久性编程模型的理解是正确的,那么将所有易失性变量(例如循环计数器)视为持久性变量是否不正确?我知道这会导致大量开销,并被确定为“性能错误”。如果在任何情况下持久化 volatile 变量会影响恢复程序的正确性,我将不胜感激。
谢谢你。