şükela:  tümü | bugün
  • mutex ile ayni gayeyi guder, farkli olarak critical section kullanirken lock obtain edilmez, gir bakalim girebiliyon mu denir thread'e, girerse girer, giremezse girene kadar bekler.. windows'un fantazi implementasyonu degil de nedir..
  • processin global biseylere erisecegi yani deadlock tehlikesi yaratan kismina verilen isim.
  • girmezden evvel "initializecriticalsection" ile initialize edilir, çıktıktan sonra "deletecriticalsection" ile siktiredilir.
  • p i ve p j adinda iki process ve boolean olarak tanimlanmis flag adinda bir arrayimiz ve turn adinda bir integerimiz varsa , mesela p i icin soyle bir entercriticalsection kullanilabilir:

    do {
    flag[i] = true;
    turn = j;
    while(flag[j] && turn ==j);

    boylelikle p i critical section'a girmek istedigini array'deki degerini true yapip gosterecek, turn degerini 1 yapip while dongusune gelecektir. eger p j de ayni ayni do dongusunu kullanip "flag[j] = true" yapsa bile, turn'un bir degeri oldugundan sadece bir process critical section'a girebilecektir.

    leavecriticalsection ise "flag[i] = false;" seklinde implement edilebilir, ve p i kardesimiz remainder sectiona gecebilir. while loopunda deli danalar gibi donen p j ise artik critical sectionuna girebilir.

    daha kompleks problemlerde semaphore kullanilmasi vaciptir
  • günlük yaşam içerisinde de bol bol kullandığımız sevimli algoritma. örneğin;

    gece vakti tıkabasa dolu bir restorana girdiniz, ortalıkta sadece bir tane garson var(1). yediniz içtiniz hesabı ödeyeceksiniz.(2) garsona hesabı getirmesi için şöyle basitçene bir el hareketi yaptınız (3), tabi ki bu kalabalık arasında garson sizi göremedi, neyse diyip çayınızı içmeye devam ettiniz. çay bittikten sonra artık bekleyecek bir şey olmadığına göre elinizi garson görsün diye bir daha kaldırdınız, ancak bu sefer kararlıyız o el garson bizi görmeden inmeyecek.(4) bir süre sonra garson bizi gördü masamızda bitti, "ne vardı abi sizin" temalı bir konuşmadan sonra hesabı çıkarttı biz hesabı ödedik, garson parayı alıp kasaya götürdü.(5) biz de eşyalarımızı toparlayıp restorandan çıktık. biz çıktıktan 10 dk. herkes yemeğini yedi sonra da restoran kapandı.(6)

    efenim bu basit hikayede;
    (1): garson, çalışmakta olan threadlerin aynı anda erişmeyi istediği değişkendir. eğer herkes restoranda garsona laf yetiştirmek için aynı anda bağırırsa olmaz, gariban garson aptallaşır, işi bırakır, kaçar gider bu diyarlardan. birden fazla aynı işlevi görecek, değişken veya daha genel anlamıyla kaynak*(yani birden fazla garson) varsa critiacal section yerine semaphore kullanılır.
    (2): yemek yemeden hesap istenmediği için initializecriticalsection
    (3): bu böyle "olmadıysa olmadı, hayrılısı olsun" tadında bir aksiyon olduğu için tryentercriticalsection
    (4): evet efenim artık hesap ödemekten başka bir işimiz kalmadı, her ne kadar elimizi bir daha indirmemecesine kaldırmış olmamız biraz saçma olsa da bu duruma da entercriticalsection benzetmesini yapabiliriz.
    (5): garsonla işimiz bitmiştir, artık kim ne yaparsa yapsındır bu adama; leavecriticalsection
    (6): artık ortada restoranın bir dahaki açılışına dek garson falan yok ve haliyle garsona erişmeyi isteyecek müşteri de yok bunu da deletecriticalsection a be benzetebiliriz.
  • critical section problemi ile başa çıkmak için kullanılan yöntemlerden bazıları şunlardır:

    (bkz: mutual exclusion)
    (bkz: progress)
    (bkz: bounded waiting)