lock 抽象方法

Future<RandomAccessFile> lock([
  1. FileLock mode = FileLock.exclusive,
  2. int start = 0,
  3. int end = -1
])

锁定文件或文件的一部分。

默认情况下,将获得独占锁,但可以通过 mode 参数覆盖。

锁定从 startend 的文件字节范围,不包括位置 end 的字节。如果没有指定任何参数,则锁定整个文件;如果只指定了 start,则无论文件增长多大,都从字节位置 start 到文件末尾进行锁定。可以指定一个超出当前文件长度的 end 的显式值。

要获取文件的独占锁,必须以写入方式打开文件。

如果 modeFileLock.exclusiveFileLock.shared,如果无法获得锁,则会发出错误信号。如果 modeFileLock.blockingExclusiveFileLock.blockingShared,则仅在获得锁后,返回的 Future 才会解析。

注意 文件锁定在不同平台之间有细微的行为差异

在Linux和OS X上,这使用咨询锁,其语义是,当进程关闭该文件的任何文件描述符时,与给定文件关联的所有锁都会被移除。请注意,这实际上并没有锁定文件以供访问。此外,请注意,咨询锁是在进程级别上的。这意味着同一进程中的多个isolate可以获取同一文件的独占锁。

在Windows上,用于锁定和解锁的区域需要匹配。如果不匹配,则解锁会导致操作系统错误:“该段已解锁”。

实现

Future<RandomAccessFile> lock(
    [FileLock mode = FileLock.exclusive, int start = 0, int end = -1]);