如何锁定文件以便在Dart中写入

时间:2014-02-21 02:39:38

标签: dart

我希望有两个程序(在不同的Dart VM上运行)将数据写入同一个文件(实际附加)。但是,我找不到锁或类似机制来避免赛车。有什么建议吗?感谢。

2 个答案:

答案 0 :(得分:2)

刚刚添加了文件锁定功能。 (http://dartbug.com/17045已更改为固定)

已复制的示例表单https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/tests/standalone/io/file_lock_script.dart?spec=svn42733&r=42733

import "dart:io";

main(List<String> args) {
  File file = new File(args[0]);
  int start = null;
  int end = null;
  var  mode = FileLock.EXCLUSIVE;
  if (args[1] == 'SHARED') {
    mode = FileLock.SHARED;
  }
  if (args[2] != 'null') {
    start = int.parse(args[2]);
  }
  if (args[3] != 'null') {
    end = int.parse(args[3]);
  }
  var raf = file.openSync(mode: WRITE);
  try {
    raf.lockSync(mode, start, end);
    print('LOCK SUCCEEDED');
  } catch (e) {
    print('LOCK FAILED');
  } finally {
    raf.closeSync();
  }
}

另请参阅https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/tests/standalone/io/file_lock_test.dart?spec=svn42733&r=42733以获取更广泛的示例。

答案 1 :(得分:1)

我认为dart不会为您提供那么奢侈......您可以使用的是创建另一个用作信号量或互斥量的文件。您实际上是在尝试解决访问共享资源的问题。很久以前在操作系统中解决了这个问题。没有必要重新发明轮子。

您可以找到有关互斥锁here的更多信息。

您可以在文件中编写具有写权限的进程的pid(检查dart:io库,有一种获取当前pid的方法)。一旦完成该过程,请删除它的pid。如果文件为空,进程可以获取锁(写入其pid)。这样你就可以使用一个简单的互斥锁来编排两个不同的虚拟机。