lockSync 抽象方法
同步锁定文件或文件的某个部分。
默认情况下会获得独占锁,但可以通过 mode
参数来覆盖。
锁定从 start
到 end
的文件字节范围,不包括位置 end
处的字节。如果没有指定任何参数,则锁定整个文件;如果只指定了 start
,则从字节位置 start
开始,无论其如何增长,都会锁定整个文件。可以指定一个显式的 end
值,该值超过了文件的当前长度。
要获得文件的独占锁,必须以写入方式打开该文件。
如果 mode
是 FileLock.exclusive 或 FileLock.shared,如果无法获得锁,则抛出异常。如果 mode
是 FileLock.blockingExclusive 或 FileLock.blockingShared,则仅在获得锁之后,调用才返回。
注意 文件锁定在不同平台上有轻微的行为差异。
在 Linux 和 OS X 上,这使用建议性锁,这有一个令人惊讶的语义,即当进程关闭该文件的任意文件描述符时,与给定文件关联的所有锁都将被删除。注意,这实际上并没有锁定文件以供访问。此外,注意建议性锁是按进程级别的。这意味着同一个进程中的几个 isolate 可以对该同一文件获得独占锁。
在 Windows 上,用于锁定和解锁的区域需要匹配。如果不匹配,则解锁会导致操作系统错误 "The segment is already unlocked"。
实现
void lockSync(
[FileLock mode = FileLock.exclusive, int start = 0, int end = -1]);