我希望有两个程序(在不同的Dart VM上运行)将数据写入同一个文件(实际附加)。但是,我找不到锁或类似机制来避免赛车。有什么建议吗?感谢。
答案 0 :(得分:2)
刚刚添加了文件锁定功能。 (http://dartbug.com/17045已更改为固定)
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();
}
}
答案 1 :(得分:1)
我认为dart不会为您提供那么奢侈......您可以使用的是创建另一个用作信号量或互斥量的文件。您实际上是在尝试解决访问共享资源的问题。很久以前在操作系统中解决了这个问题。没有必要重新发明轮子。
您可以找到有关互斥锁here的更多信息。
您可以在文件中编写具有写权限的进程的pid(检查dart:io库,有一种获取当前pid的方法)。一旦完成该过程,请删除它的pid。如果文件为空,进程可以获取锁(写入其pid)。这样你就可以使用一个简单的互斥锁来编排两个不同的虚拟机。