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