Является ли операция перемещения в Unix атомарной?
Предположим, есть 2 процесса P1 и P2, и они получают доступ к общему файлу.Foo.txt
Предположим, что P2 читает изFoo.txt
, Я нене хочу, чтобы P1 писалFoo.txt
пока P2 читает это.
Так что я думал, что смогу сделать запись P1 вFoo.tmp
и как последний шаг, переименуйтеFoo.tmp
вFoo.txt
, Мой язык программирования - Java
Итак, мой вопрос, будет ли это гарантировать, что P2 считывает правильные данные изFoo.txt
? Будет ли выполнена операция переименования после завершения чтения файла P2?
РЕДАКТИРОВАТЬ
Я попытался воссоздать этот сценарий следующим образом:
Мой код P1 выглядит примерно так:
File tempFile = new File(path1);
File realFile = new File(path2);
BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
for(int i=0;i