Мьютекс – TryOpenExisting против новогоC#

Место общения программистов C#
Anonymous
Мьютекс – TryOpenExisting против нового

Сообщение Anonymous »

Я думаю о мьютексах и мне нужны некоторые разъяснения по поводу них. Должен ли я попытаться открыть существующий мьютекс или создать новый (конечно, с тем же именем). Пример кода:

Первая попытка — попробуйте открыть существующий:

Код: Выделить всё

private void AttemptOne()
{
Mutex myMutex;
if (!Mutex.TryOpenExisting("Mutex Name", out myMutex))
myMutex = new Mutex(false, "Mutex Name");
try
{
myMutex.WaitOne(3000);
// code
}
catch { }
finally
{
myMutex.ReleaseMutex();
// myMutex.Dispose(); - should I call that or it will be called automatically when returning from method?
}
}
Вторая попытка — создать новый мьютекс:

Код: Выделить всё

private void AttemptTwo()
{
using (Mutex mutex = new Mutex(false, "Mutex Name"))
{
try
{
mutex.WaitOne(3000);
// code
}
catch { }
finally { myMutex.ReleaseMutex(); }
}
}
Меня беспокоят несколько вопросов:
  • которые попытаться использовать?

    Предположим, что у меня есть фоновый процесс с созданным мьютексом, и в то же время основной процесс пытается выполнить некоторую работу, которую следует заблокировать до завершения фонового процесса. Если фоновый процесс создал собственный мьютекс, стоит ли мне попытаться его открыть?

    Или создать новый мьютекс в основном потоке с тем же именем?

    В чем разница между этими попытками?
  • должен ли я вызывать Dispose() при первой попытке ?

    Или просто предположим, что Mutex будет удален при возврате метода? Будет ли он тогда удален?
  • Я предполагаю, что во второй попытке Mutex будет удален (как его IDisposable) после завершения использования(). Я прав?


Подробнее здесь: https://stackoverflow.com/questions/217 ... vs-new-one

Вернуться в «C#»