• 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
  • 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)
  • windows sistemlerde, thread'ler arası senkronizasyon sağlanırken mutex ile aralarındaki bir diğer önemli fark da windows'un ipc için kullandığı named objects mekanizmasıdır. bu sayede ilgili kernel senkronizasyon nesnesi isimlendirilerek*, bu nesneye**** ilişkin handle farklı bir process tarafından da paylaşılabilir. dolayısıyla yalnızca thread'ler arası senkronizasyon değil, process'ler arası haberleşmenin ve senkronizasyonun da sağlanabilmesi hedeflenir. nitekim işletim sisteminin* task scheduling algoritması (multi level feedback scheduling / user mode scheduling) bütün bir process bazında değil, thread'ler düzeyinde işletildiği için temelde yine thread senkronizasyonu yapılmış olur. öte yandan critical section, mutex'e oranla daha hızlıdır. zira kritik kod bölgesi (tam anlamıyla olmasa da) user-mode çalışmaktadır. mutex, semaphore, vb. kernel senkronizasyon nesneleri ise doğrudan kernel-mode çalışırlar. dolayısıyla her kernel mode'a geçişte bir overhead yaşanır, haliyle daha gecikmelidir. yine tam manasıyla olmasa bile, senkronizasyon işlemlerinin büyük çoğunluğunun user-space'de gerçekleştirilmesi bakımından linux sistemlerdeki karşılığı futex olarak düşünülebilir.
hesabın var mı? giriş yap