Dav*_*lla 5 concurrency matlab mutex locking file
我正在寻找一个简单的已经实现的解决方案,用于在MATLAB中原子地创建文件锁.
就像是:
file_lock('create', 'mylockfile'); %this will block until it creates the lock file.
file_lock('remove', 'mylockfile'); %this will remove the lock file:
Run Code Online (Sandbox Code Playgroud)
已经多次询问过这个问题,提出了一些解决方案的想法(例如使用Java FileLock),但我没有找到一个简单的已经实现的解决方案.
你知道这样一个实施的解决方案吗?
笔记:
我已经找到了一个非常简单的解决方案,用于将来自多个工作线程的错误/日志记录消息组合到一个文件中.每次我想写入该文件时,我首先将输出写入线程自己的临时文件.接下来,我使用flock将该临时文件附加到"master"日志文件中.在这里略过一些细节,这个想法是:
fid=fopen(threadtemp, 'w');
fprintf(fid, 'Error message goes here');
fclose(fid);
runme = sprintf('flock -x %s -c ''cat %s >> %s''', LOGFILE, threadtemp, LOGFILE);
system(runme);
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅flock手册页,但上面的调用是在日志文件上获取一个eXclusive锁,在锁下运行提供的Command,然后释放它.
这显然只有你在一个拥有flock的系统(Linux/OS X,并且只有某些类型的文件系统)并且你正在做一些可以从命令行完成的事情时才有效,但我敢打赌这是一个非常常见的用例.