Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Tüm Başlıklar XML

1.  kilit, kördüğüm
jessender
06 Ekim 2005 12:02
2.  Sınırlı kaynaklara* aynı anda birçok prosesin erişmeye çalışmasında ortaya çıkan durum.
mennan
07 Ekim 2005 05:08
3.  multithread bi uygulama yazdığınızda, threadler tarafından ortak olarak kullanılan değişkenler kullanılmadan evvel herbir thread onu himayesine alır (lock) ve işi bitince serbest bırakır (unlock). eğer thread bir değişkeni himayesine almak istediği sırada başka bir thread tarafından alıkonulmuş ise, yapacağı iş istediği değişken serbest bırakılana kadar beklemektir. Peki öbür thread o değişkeni çok sevmiş ve bi türlü serbest bırakmak istememişse ne olur? Cevap: DEADLOCK. Adı bile korkunç kimbilir kendisi nasıl bişey.

Yukarıdaki örnek teorik olarak ve temel anlamıyla doğru olsa bile, eğer programın yazarı manyağın teki değilse bu kadar basitçe gerçekleşmez. En çok karşılaşılan deadlock durumu aşağıdaki durumun türevleri gibidir;
A değişkeni elinizdeyken B değişkenini de  daha istersiniz, ancak B değişkeninin şu anki sahibi de sizin elinizdeki A değişkenini beklemektedir. Bu kısır döngü çözülmeyen bir düğüm halini alır.İşte deadlock genelde böyle oluşur.
red
10 Ekim 2005 13:40
4.  bkz: thread-safe
fizikci
11 Ekim 2005 00:28
5.  Oracle için deadlock oluşmasını şöyle bir senaryo ile aktarmaya çalışayım:

Deadlock olayı multithread yapılarda gerçekleşir.Çoklu kullanıcıları simule edebilmek için öncelikle 2 tane session açalım.Deneme amaçlı 2 tane a ve b tablolarını oluşturuyoruz. İçlerine veri giriyoruz.
create table a( x number )
INSERT INTO  a(x) VALUES (10)

create table b( x number )
INSERT INTO b (x) VALUES (100)

commit i unutmuyoruz tabiiki.
commit


Session1 içinde bir güncelleme yapıyoruz.
UPDATE a SET x = 5

Bunu commit etmiyoruz.Bu güncelleme a tablosu üzerinde exclusive lock oluşturuyor.Yani başka kimse bu tabloda güncelleme yapamıyor.Daha sonra ikinci sessionumuza geçiyoruz.
Session2 içinde ise
UPDATE b SET x = 1000

Bunu da commit etmiyoruz.B tablosunu da session2 kilitledi exclusive olarak.Bu session içinden kilitli olan a tablosunu güncellemek istiyoruz.
UPDATE a SET x = 50

Session1, bu tabloyu kilitlediği için bekliyoruz haliyle.Ne zaman session1, commit veya rollback yaparsa bu sessionumuz işlemini yapacaktır.

Mevcut durumda
--     Session1   a'yı kilitlemiş
--     Session2   b'yi kilitlemiş ve  a'nın kilidinin kalkmasını bekliyor

şimdi ise ilk sessionumaza gidip b tablosunu güncellemek istediğimizi belirtiyoruz.
UPDATE b SET x = 500

İkinci session tarafından kilitlendiği için güncelleme yapamıyoruz.Session2 tarafından kilidinin kalkmasını beklemeliyiz.Ama session2 nin de kilidi bırakması için Session1'in işini bitirmesi gerekiyor.İşte bu noktada iki session karşılıklı olarak birbirini beklediği için kaçınılmaz son olan deadlock gerçekleşiyor.

Oracle abimiz akıllı olduğu için, deadlock durumunu anlıyor ve bu 2 sessiondan birini kurban kabul edip öldürüyor.Eğer Oracle abi,bunu farketmeseydi, bunlar oyle abi-kardeş birbirini beklerdi.Oracle'nin akıllı olması heralde en çok DBAleri sevindiriyor.

Peki deadlocktan kurtulmak için napalım derseniz, öneri olarak eğer bir transaction boyunca lazım olan tabloları aynı anda kilitlerseniz veya boyle bir durumda oluşacak exceptionu handle edip birkaç milisaniye sonra tekrar işleme alsanız sorun bir nebze çözülecektir.
mennan
25 Aralık 2005 21:03
6.  Transaction ve lock ile ilgili bir problem. Özetle;
transaction1 a'yı kilitleyip b'yi istiyor ve
transaction2 b'yi kilitleyip a'yı istiyor ise
deadlock denilen kördüğüm oluşur.

Eğer transaction2 b'yi kilitlemeyip sadece a'yı isteseydi, sadece transaction1'in bitmesini bekleyecekti. Ama b'yi kilitlediği için iki transaction da birbirinin bitmesini bekliyor. Hiçbiri bitemiyor.
fizikci
23 Haziran 2006 17:24 ~ 23 Haziran 2006 18:01
7.  İşletim sistemi büyüklüğü gösterip rastgele birini kill edebiliyor. Veya saşlıysanız TaskManager'den manuel kill'de yapabiliyorsunuz!
haydar
23 Haziran 2006 17:37
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.


Bu başlığa bkz veren girişlerin başlıkları nedir?

Bu başlığa bkz veren girişler başka hangi başlıklara bkz verdiler?
© 2005, Bilişim Kulübü. (1187 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen