1. 1
    diyelim ki ben bakalım. dükkanımda bir tane ekmek kalmış. aynı anda iki müşteri geliyor. ikisi de ekmek istiyor.

    race condition budur. ciddi bir problemdir, sonu cinayete kadar gidebilir.

    çözümü müşterinin ekmeği alma yönteminde yatar.

    m:ekmek var mı?
    b:var
    m: versene bir tane
    b: al

    müşteri okuma işlemi yapar, sonucuna göre karar verir. aynı anda (bunu da açıklayacağım) gelen iki müşteriye de 'ekmek var' cevabı verilir. her iki müşteri de ekmeği almayı ister ama alamaz.

    bu yüzden, race condition ihtimalini azaltmak için 'kilitlemeli okuma' kullanılır. yani bakkal 'ekmek var mı' sorusunu duyduğu an ekmeği rezerve eder. 'ekmek var mı' diye soran ikinci müşteriye de cevap vermez.

    bir çok olay gerçekte 'aynı anda' gerçekleşemez ve 'kilitlemeli okuma' bir çok problemi çözer.

    bazen kilitlemeli okuma daha büyük problemlere neden olabilir. örneğin yine iki müşteri olsun, ikisinin de hedefi peynir ve ekmek almak olsun. bakkalda da son kalan peynir ekmek var.

    birinci müşteri 'ekmek var mı' diye sorsun.

    ikinci müşteri de 'peynir var mı' diye sorsun.

    bu durumda bakkal ikisine de 'var' cevabı verir, peyniri bir müşteriye, ekmeği diğer müşteriye kilitler.

    sonra müşterilerin ikinci soruları, yer değiştirmiş bir şekilde gelir. bakkal ikisine de cevap veremez, çünkü istenilen ürünler rezervelidir (kilitli).

    bakkal ve müşteriler sonsuza kadar sessizlik içinde beklemeye mahkum olur.(bkz: deadlock)

    en sık kullanılan yöntemlerden biri uzun süren beklemenin ardından (örneğin sql server bunu yapar) müşterilerden birini öldürmektir.

    bakkal saatine bakar, sessizlik yeteri kadar uzun sürdüyse yazı tura atar, sonucuna göre müşterilerden birini öldürür. hayatta kalan müşteri peyniri de, ekmeği de alır.
    #11235 Keltox | 3 yıl önce
     
  2. 2
    muhtemelen bugün kulzos'un başına gelen hadise... bakkalın müşterilerden birini öldürmesi azıcık uzun sürdü sadece.
    #92171 larden loughness | 1 yıl önce