Могу ли я использовать конструктор FileStream
, чтобы гарантировать, что только один процесс обращается к файлу за раз? Будет ли работать следующий код?
public static IDisposable AcquireFileLock() {
IDisposable lockObj;
do {
// spinlock - continually try to open the file until we succeed
lockObj = TryOpenLockFile();
// sleep for a little bit to let someone else have a go if we fail
if (lockObj == null) Thread.Sleep(100);
}
while (lockObj == null);
return lockObj;
}
private static FileStream TryOpenLockFile() {
try {
return new FileStream(s_LockFileName, FileMode.Create, FileAccess.Read, FileShare.None);
}
catch (IOException) {
return null;
}
}
В частности, каково поведение FileMode.Create
атомарных WRT других процессов? Есть ли что-то еще, что я должен использовать?
РЕДАКТИРОВАТЬ: чтобы быть более конкретным, это в Microsoft CLR с использованием локальных файлов на одной машине.