bipin9 Ответов: 3

что такое мьютекс в C#.NET или как использовать это как класс , метод или свойство


что такое мьютекс в C#.NET или как использовать это как класс , метод или свойство

3 Ответов

Рейтинг:
27

#realJSOP

Действительно, набирать "Гугл" - это слишком большая нагрузка для вас? Мьютекс-это объект синхронизации, используемый в многопоточных приложениях.

Если google "C# what is a mutex", вы получите 109 000 возвращенных результатов. Держу пари, что вы получите более подробный ответ от одного из них.


Рейтинг:
12

Tim Groven

Вот несколько хороших статей о том, как его использовать:


Чистое решение для приложений с одним экземпляром .NET[^]

Семафора Идентификатор Процесса [^]


Рейтинг:
0

akshay0

Мьютекс означает взаимное исключение. Язык C# предоставляет тип мьютекса, чтобы гарантировать, что определенные блоки кода выполняются только один раз за раз. Тип мьютекса может создавать именованные мьютексы, которые могут быть открыты другими процессами. Это полезно для обеспечения того, чтобы на компьютере можно было запустить только один экземпляр.

Пример
В этом простом примере используется мьютекс.Метод OpenExisting. Если метод OpenExisting вызывает исключение, указанный именованный мьютекс не существует или недоступен. Метод IsSingleInstance использует это поведение.

Если мьютекс не существует, он создает новый. Дальнейшие экземпляры программы тогда могут сказать, что есть экземпляр уже открытый.

Программа, которая использует мьютекс и перегруженный метод openexisting [с#]

использование системы;
использование системы.Нарезание резьбы;

классная программа
{
статический мьютекс _m;

статический bool Issingle instance()
{
пробовать
{
// Попробуйте открыть существующий мьютекс.
Взаимное исключение.Перегруженный метод openexisting("Перл");
}
ловить
{
// Если произошло исключение, то такого мьютекса нет.
Program._m = новый мьютекс(true, "PERL");

// Только один экземпляр.
вернуть true;
}
// Более одного экземпляра.
возвращать false;
}

статический недействительным Главная()
{
если (!программа.IsSingleInstance())
{
Приставка.WriteLine("более одного экземпляра"); // выход из программы.
}
еще
{
Приставка.WriteLine("один экземпляр"); // продолжить работу с программой.
}
// Остаться открытым.
Приставка.Линия чтения();
}
}

Результат

1. Первое выполнение покажет "один экземпляр"
2. Второе выполнение будет показывать "более чем в одном экземпляре"
3. Третье исполнение-это то же самое, что и второе.

Заметки о производительности. К сожалению, программа имеет одно исключение в общем случае запуска первого экземпляра. Исключения значительно медленнее, чем многие конструкции. Однако если ваша программа требует больших вычислительных затрат, было бы более выгодно избежать запуска дополнительных экземпляров.

Пожалуйста, обратите внимание:
В примерах OpenExisting на MSDN также используется обработка исключений.

Ссылка MSDN [мьютекс.Перегруженный метод openexisting]
Методы

Иногда бывает важно вызвать Release для вашего экземпляра мьютекса, как только вы закончите с ним. В приведенном выше простом примере это не обязательно, так как мьютекс будет освобожден при выходе из программы. Код хорошо работает без освобождения мьютекса.

Продолжая, тип мьютекса предоставляет методы WaitOne, WaitAll и WaitAny. Метод WaitOne блокирует текущий поток до тех пор, пока мьютекс не будет освобожден. Релизы происходят при вызове метода Release.

Резюме

Тип мьютекса позволяет использовать общесистемную синхронизацию. Он также может синхронизировать потоки в рамках одной программы.

Совет:
Если мьютекс имеет строковое имя, его можно открыть из других процессов с OpenExisting. Это поведение можно использовать для принудительной синхронизации между процессами и потоками.


Надеюсь, это вам поможет, ребята.....
-АВВ