cDLEON
Процессор не может заниматься сразу несколькими действиями. Поэтому ваш вопрос, мне кажется,снимается.
Вопрос снимался если бы у нас был старый однозадачный DOS.
Сейчас даже на однопроцессорных системах существует многозадачность, те несколько процессов почти параллельно выполняются на одном процессоре. А делается это путем разделения времени работы процессора между разными процессами.
То есть возможна ситуация, когда:
0) в процессе А и В по какойто причине генерируются одинаковые имена и первым начинает проверку процесс А.
1) процесс А проверил то, что нет такого файла.
2) Менеджер процессов в ОС подумал, что хватит процессу А работать усыпляет его и запускает процесс В
3) Процесс В проверяет наличие такого-же файла в том же каталоге, и убедившись что его нет создает его (ну повезло процессу В. Он успел создать файл)
4) менеджер процессов усыпляет процесс В и запускает процесс А
5) Процесс А думает, что его не прерывал и думает что файла нет И по этому он создает файл с таким-же именем. Таким образом затирая файл созданный процессом В.
Вероятность такой ситуации не очень велика (так как мала вероятность того что 2 рандома дадут одно имя, а сюда же можно pidы процессов приклеить) Но в случае если в 2-х параллельно выполняющихся процессах вдруг создадутся одинаковые имена, то вероятность такой коллизии повышается.