11 Ocak 2016 Pazartesi

C++ Mutex

Mutex'in kullanımı için genelde aynı uygulamanın aynı bilgisayarda aynı anda birden çok açılmasının engellenmesi örneği verilmektedir. Biz burada birden çok uygulamanın aynı günlük (log) dosyasına satırlar eklemesinin senkronizasyonunu göreceğiz. Diyelim ki şöyle bir kodumuz var ve bunu Mutex kullanarak uygulamalarımız arasında da güvenli kılmak istiyoruz (yani log dosyasını aynı anda birden çok uygulama yazma hakkıyla açmak istediği için sorun yaşıyoruz ve bir şekilde bunları düzene sokmak istiyoruz) :
1public static void LogYaz(String s)
2{
3   File.AppendAllText("YPLog.log", s);
4}
Bu kodu şu şekilde güvenli hale getirebiliriz:
01private static Mutex mtx = new Mutex(false"YazilimProjesi_LogMutexi");
02 
03public static void LogYaz(String s)
04{
05   mtx.WaitOne();
06   try
07   {
08      File.AppendAllText("YPLog.log", s);
09   }
10   finally
11   {
12      mtx.ReleaseMutex();
13   }
14}
Lock deyiminde olduğu gibi, bir mutex sadece onu kilitleyen proses tarafından serbest bırakılabilir. Mutex'le ilgili ek bir bilgi daha verelim; ReleaseMutex metodu çağrılmadan uygulama sonlanacak olursa, CLR tarafından ilgili mutex otomatik olarak serbest bırakılır.
Share: