我有一个运行一系列for循环的脚本,在这些for循环中创建一个文件,然后使用script命令使用外部程序运行该文件。总之,它看起来像这样:
for i=1:n1
for j=1:n2
for k=1:n3
fid=fopen('file.txt','w');
fprintf(fid,'Some commands to pass to external program depending on i j k');
fclose(fid);
system('program file.txt');
end
end
end
该脚本总共有大约500k个案例(n1xn2xn3),并且在一个小场景(大约100次运行)中运行正常,但是对于整个脚本它运行了一段时间然后返回错误,没有明显的原因,给出了这个错误:
fopen无效的文件标识符对象
这没有明显的原因,我想知道是否有人可以指出什么是错的?
答案 0 :(得分:2)
只是猜测:你的外部程序的一个实例正在读取file.txt,同时你的嵌套循环的下一次迭代想要打开file.txt进行写入。外部程序的实例越多,同时运行,机器越慢,这种情况就越可能发生。 (称为“竞争条件”)
可能的解决方案:每个案例使用一个单独的文本文件,并使用唯一的文件名
您还应该考虑使用其他方法来调用外部函数,因为500k案例的文件处理应该非常慢。
希望有所帮助, 利