Могу ли я использовать FileStream для реализации блокировки файла?

Могу ли я использовать конструктор 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 с использованием локальных файлов на одной машине.

5
задан thecoop 29 November 2010 в 18:26
поделиться