在MATLAB中原子地创建文件锁(文件互斥)

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),但我没有找到一个简单的已经实现的解决方案.

你知道这样一个实施的解决方案吗?

笔记:

Mat*_*use 5

我已经找到了一个非常简单的解决方案,用于将来自多个工作线程的错误/日志记录消息组合到一个文件中.每次我想写入该文件时,我首先将输出写入线程自己的临时文件.接下来,我使用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,并且只有某些类型的文件系统)并且你正在做一些可以从命令行完成的事情时才有效,但我敢打赌这是一个非常常见的用例.


Ben*_*igt 0

写入新文件,然后重命名。重命名是一个原子操作,所有新内容将立即变得可见。