Вы не можете без какого-либо механизма синхронизации - к тому времени, как SECOND завершит проверку и начнет читать файл, FIRST, возможно, снова начнет его записывать. Вам нужен какой-то замок или мьютекс.
Два варианта базового Matlab.
Если это локальная файловая система, вы можете использовать отдельный файл блокировки, расположенный рядом с файлом данных, для управления одновременным доступом к файлу данных. Используйте объекты Java NIO FileChannel и FileLock из Matlab, чтобы заблокировать первый байт файла блокировки, и используйте его в качестве семафора для управления доступом к файлу данных, чтобы читатель ожидал завершения записи и наоборот. (Если это происходит в сетевой файловой системе, не пытайтесь сделать это - может показаться, что блокировка файлов работает, но обычно она официально не поддерживается и, по моему опыту, ненадежна.)
Или вы можете просто сделать попытку / перехватить ваш load()
вызов и сделать паузу на несколько секунд и повторить попытку, если вы получили ошибку поврежденного файла. Формат файла .mat таков, что вы не получите частичное чтение, если писатель все еще пишет его; вы получите эту ошибку поврежденного файла. Таким образом, вы можете использовать это как ленивый вид обнаружения столкновений и отката. Это то, что я обычно делаю.
Чтобы уменьшить окно раздора, рассмотрите возможность ПЕРВОЙ записи во временный файл в том же каталоге, а затем используйте переименование, чтобы переместить его в конечный пункт назначения. Таким образом, файл недоступен только во время быстрого перемещения файловой системы, а не 20 секунд записи данных. Если у вас есть несколько писателей, введите PID и имя хоста в имя временного файла, чтобы избежать коллизий.