Evet arkadaşlar, şimdi de kilitlenmeleri tartışacağız.
İş parçacığı senkronizasyonu söz konusu olduğunda, kilitlenme karşılaşacağınız en popüler
terimlerden biridir.
Yani kilitlenme, burada kimsenin olmadığı bir durumdur, kimse sürecinizin herhangi bir iş parçacığı anlamına gelmez.
Yani kilitlenme, bir sürecin hiçbir iş parçacığının ilerleme kaydetmediği ve bu kilitlenme durumuna
katılan tüm iş parçacıklarının sonsuza kadar engellendiği bir durumdur.
Buradaki sonsuza kadar terimine dikkat edin, değil mi?
Yani bu kilit kalıcı bir durumdur.
Programınızda bir kez meydana geldiğinde, programınızı öldürüp yeniden başlatmaktan başka bir
çözüm yolunuz yoktur.
Dolayısıyla, tehditler yanlış bir şekilde senkronize edilirlerse kilitlenmeye maruz kalabilirler.
Şimdi, paylaşılan bir kaynak için rekabet eden sürecin birden fazla iş parçacığının hangi durumda kilitlenme
durumuna girebileceğini anlayalım.
Sağ taraftaki bir resim binlerce kelime söyler.
Bu, bir çıkmaz durumunu tasvir eden gerçek bir dünya durumudur.
Değil mi?
Şimdi bir süreçteki iş parçacıklarınızın hangi durumda kilitlenmeye maruz kalabileceğini anlamaya çalışalım.
Diyelim ki bir süreciniz var.
P Ve bu süreçte P bazı R2 kaynaklarına sahip olursunuz.
Bu kaynak, R2 işleminizin bazı veri yapıları veya başka bir kaynak olabilir.
Örneğin, işleminiz bir SQL veritabanına erişmeye çalışıyor olabilir, değil mi?
Yani R2, işleminizin erişmeye çalıştığı kaynaklardan birini temsil ediyor, değil mi?
Ve benzer şekilde, bir kaynağımız daha var, diyelim ki R1.
Yani R1 ve R2, bir sürecin iş parçacıklarının erişmeye çalıştığı iki farklı kaynaktır.
Şimdi sürecinizin T1 adında bir iş parçacığına sahip olduğunu ve T1 iş parçacığının R2 kaynağını zaten günlüğe kaydettiğini
varsayalım.
Doğru.
Bu, T1 iş parçacığının R2 kaynağını kullandığı anlamına gelir.
Doğru.
Antlaşma.
R2 kaynağı üzerinde pthread mutex lock çağrısı zaten yapılmış ve bu çağrı başarıyla tamamlanmıştır.
Yani bu basitçe R2 kaynağının T1 iş parçacığı tarafından kilitlendiği anlamına gelir.
Benzer şekilde, süreçte bir iş parçacığı daha olduğunu varsayalım.
T2 ipliğini ve ipliği söyleyin.
T2 zaten r1 kaynağı üzerinde başarılı bir şekilde kilit kazanmıştır.
Doğru.
R1 kaynağının kendi muteksine ve R2 kaynağının kendi muteksine sahip olduğunu görebilirsiniz.
Mutex'in bir iş parçacığının değil, bir kaynağın özelliği olduğunu unutmayın.
Eğer kaynak bir dolap gibiyse, ilgili muteks de o dolabın anahtarı gibidir.
Şimdi bu durum söz konusuyken, tehdit de budur.
T1 zaten R2 kaynağını kilitlemiştir ve T2 iş parçacığı zaten R1 kaynağını kilitlemiştir.
Şimdi T2 iş parçacığının yürütme akışını gerçekleştirdiğini ve R2 kaynağı üzerinde de bir kilit vermek istediğini
varsayalım.
Doğru.
Bir sürecin bir iş parçacığının aynı anda bir sürecin birden fazla kaynağına kilit vermek istemesi
çok olasıdır.
Diyelim ki T2 iş parçacığı R2 kaynağının muteksi üzerinde bir çağrı iş parçacığı muteks kilidi çağırıyor.
Doğru.
Şimdi R2 kaynağı zaten T1 iş parçacığı tarafından kilitlendiği için ne olacak, bu sadece T2 iş parçacığının zaten kilitli
olan bir muteksi kilitlemeye çalıştığı anlamına gelir.
Bu da t2 iş parçacığının engellenmiş duruma geçeceği anlamına gelir.
Doğru.
İş parçacığı engellenmiş duruma geçtiğinde, iş parçacığı herhangi bir işlem yapamaz.
Benzer şekilde, 31 R1 kaynağı üzerinde kilit sahibi olmak ister.
Doğru.
Ve bunun için 31, R1 kaynağı üzerinde Pthread mutex lock API'sini çağırır, ancak R1 kaynağı zaten T2 iş parçacığı tarafından
kilitlenmiştir.
Bu sadece T1 iş parçacığının da engellenmiş bir durumda olacağı anlamına gelir.
Doğru.
Şimdi tüm bu tabloda çıkmazın oluştuğunu görebilirsiniz.
T1 ve T2 iş parçacığı olan her iş parçacığı diğer iş parçacığının kaynağı serbest bırakmasını beklemektedir.
Doğru.
Yani bir bakıma bu iki iş parçacığının her birinin diğerinin kaynağı serbest bırakmasını beklediğini ve bu nedenle bir
tür kilitlenme durumu olduğunu görebilirsiniz.
Asla ilerleyemezler.
Şimdi, programınızda kilitlenmenin nasıl meydana gelebileceğini anladıktan sonra, bir sonraki
ders videosunda, bir sürecin iş parçacıklarının kilitlenme durumuna maruz kalması için aynı anda gerçekleşmesi
gereken minimum koşul kümesinin ne olduğunu resmi olarak anlayacağız.