基本 TxF 概念
读取隔离
事务 NTFS (TxF) 提供读取提交的一致性。
事务处理编写器是指使用不属于泛型读取访问权限但属于泛型写入访问权限的任何权限打开的事务处理文件句柄。 事务处理编写器查看文件的最新版本,该文件包含同一事务的所有更改。 每个文件只能有一个事务处理编写器。 即使文件是使用共享写入权限打开的,非事务处理编写器始终会被事务处理编写器阻止。
事务处理读取器是指使用属于泛型读取访问权限但不属于泛型写入访问权限的任何权限打开的事务处理文件句柄。 事务处理读取者查看打开文件句柄时存在的文件的已提交版本。 事务处理读取器与事务处理编写器的影响隔离开来。 这仅在文件句柄的生命周期内提供一致的文件视图,并阻止非事务写入器。
注意
当使用 CreateFileTransacted 函数打开句柄进行修改时,系统会将该事务中文件的所有后续打开(无论是否为只读)转换为事务处理编写器,以用于隔离和其他事务语义。 这意味着,随后,当打开句柄进行只读访问时,句柄在事务开始之前不会收到文件视图;它接收文件的活动事务视图。
在提交事务之前,未事务处理的文件句柄不会在事务中看到任何更改。 非事务处理的文件句柄接收与事务处理读取器类似的独立视图,但与事务处理读取器不同,它在事务处理编写器提交事务时接收文件更新。
隔离级别
TxF 提供读取提交隔离。 这意味着在事务外部看不到文件更新。 此外,如果在读取事务中的文件时多次打开文件,则每次后续打开时可能会看到不同的结果。 首次访问时可用的文件可能 (不可用,因为它们) 删除,反之亦然。
事务锁定
在文件上创建事务处理编写器 会以事务性地锁定 文件。 事务锁定文件后,尝试修改事务锁定文件的锁定事务外部的其他文件系统操作将失败, ERROR_SHARING_VIOLATION 或 ERROR_TRANSACTIONAL_CONFLICT。
下表汇总了事务锁定。
当前打开的文件
文件打开尝试者
成交的客户
非事务处理
读取器
读取器/编写器
读取器
读取器/编写器
事务处理读取器
是
是
是
否2
事务读取器/写入器
是
否2
是
否2
非事务读取器
是
是
是
是
非事务读取器/写入器
否1
否1
是
是
- 失败并 出现ERROR_TRANSACTIONAL_CONFLICT
2. 失败并 出现ERROR_SHARING_VIOLATION
如果为使用事务的修改打开命名流,则需要锁定整个文件。
除了事务锁定外,还应用典型的 NTFS 文件共享规则。
需要并行考虑以下两种文件共享模式:
- 事务锁定模式。
- 正常的文件共享模式。
哪种模式更严格,都适用。