Uzupełniam ostatnio braki w wiedzy, dotyczące synchronizacji wątków. Gdzieś w podrozdziale dotyczącym tego tematu przykuł moją uwagę Mutex. Mutex to, obok monitorów i semaforów, jedna z “prymitywnych” metod synchronizacji. Ma jednak bardzo ciekawą właściwość, odróżniającą ją od kolegów po fachu…
Otóż co to za właściwość? Tatusiem Mutexu jest bezpośrednio windowsowy kernel a jego właścicielem może być w jednej chwili tylko jeden wątek. Wątek, który przejmuje obiekt typu Mutex na własność nie blokuje sam siebie ale musi zwolnić go przy użyciu metody ReleaseMutex. Co w tym nadzwyczajnego? Jeszcze jedna sztuczka!
Korzystając z jednego z przeciążonych konstruktorów, możemy nadać obiektowi typu Mutex nazwę. Uwaga, kurtyna w górę ;) Nazwa ta jest unikalna wśród wszystkich procesów w systemie! Otóż to, panie i panowie ;) Całe to cudeńko pozwala nam niejako udostępniać obiekt Mutex pomiędzy różnymi aplikacjami. Przeważnie użylibyśmy tej właściwości do synchronizacji dostępu tych aplikacji np. do zasobów dyskowych, sieciowych itp. Jednak jest jeszcze jedno interesujące użycie.
Do sedna. Wykorzystując konstruktor z trzema parametrami:
bool initiallyOwned,
string name,
out bool createdNew
)
Możemy skonstruować sprytny kod, który pozwoli uruchomić jednocześnie tylko jedną instancję pisanej przez nas aplikacji. Przykład?
{
bool isNewCreated;
System.Threading.Mutex mutex = new Mutex(true, "MUTEX_DEMO", out isNewCreated);
if ( isNewCreated )
{
Console.WriteLine("Brawo - jesteś pierwszy! ;)");
}
else
{
Console.WriteLine("Niestety! Nie byłeś pierwszy ;)");
}
Console.ReadLine();
}
W sumie jedną linijką kodu załatwiamy sprawdzenie. Być może nie jest to wyjście idealne, ale czasem może uratować trochę czasu.
Podobne wpisy
“throw” czy “throw exc” – czyli jak najlepiej przerzucić wyjątek wyżej
Komentarze
Dodaj komentarz



dotnetomaniak.pl on 01.05.2010
Mutex i sprawdzanie czy aplikacja jest jedyną uruchomioną : andrzej.net.pl…
Dziękujemy za publikację – Trackback z dotnetomaniak.pl…
gość on 01.06.2010
Maniera niektórych autorów tekstów jest porażająca. Pierwszy raz słyszę konstrukcję, że coś jest tatusiem czegoś (muteksu). Otóż tekst pełen niepotrzebnych wtrąceń zdecydowanie gorzej się czyta, niż tekst bez tych wtrąceń. Także to niepotrzebne budowanie napięcia. Nie dla każdego czytelnika słowo muteks jest czymś osobliwym. Pozdr.
andrzej on 01.06.2010
Temat raczej luźny, dlatego forma bardziej żartobliwa :) Nie było zamiarem tego postu wykładanie teorii Mutex – dlatego staram się dawać odnośniki do dokumentacji, by każdy mógł doczytać co i jak. Mimo wszystko dzięki za konstruktywną krytykę ;)