Sol tarafta, mutex'in bir kaynak dosyası olduğunu görmek için bir süre okudum ve sağ
tarafta önceki ders videosunda uyguladığımız aynı yüksek profile sahibiz.
Şimdi kaynak dosyada, muteks ile ilgili ilk API'yi zaten uyguladım çünkü
çok basit.
Tek yapmanız gereken özyinelemeli yansıtılmış harici yapıların tüm durum değişkenlerini başlatmaktır,
bu kadar basit.
Bu yüzden tartışmamıza ikinci API özyinelemeli muteks kilidi uygulaması ile başlayacağız.
Tamam.
Her şeyden önce, bu geri çağırma Cimarex Lock API'sini uygulamak için algoritmanın ne olması
gerektiğini daha yüksek bir seviyede tartışalım, bu yüzden neden uygulamanızda yürüyüşler ve API özyinelemeli muteks, özyinelemeli
muteks üzerinde kilitleme, yapı veya nesne değil.
Aşağıdaki üç vaka ortaya çıkar Bunu kimse görmüyor.
Bu özel özyinelemeli muteks nesnesi zaten kaydedilmemiştir.
Bu API'yi çağıran üçlünün bu kilide erişim izni verilmesi gereken kişi olduğu anlamına gelir.
Tamam.
İkincisi, şu davalar.
Tehdit bu API kayıtları mutex lakh'ı içerdiğinde, bu belirli özyinelemeli mutex nesnesinin olması
mümkün olabilir.
Bu konu başlığının kendisi tarafından zaten kaydedilmiştir.
Yani bir Ruger rex şimdiden kendini sevdirdi.
Bu iki numaralı dava.
Ve son olarak, üç numaralı durum, bu belirli özyinelemeli muteks nesnesi kaydedildiğinde, ancak bu özyinelemeli muteks kilit API'sini çağıran
bu belirli Karen kabilesi tarafından değil, başka bir iş parçacığı tarafından kaydedildiğini söylüyor.
Sistemde çok sayıda iplik olabilir, değil mi?
Başka bir kabile tarafından.
Dolayısıyla, bu API'yi tamamen uygulamak için bu üç durumu da kapsamamız gerekiyor, bu yüzden uygulamaya bir numaralı
durumla başlayalım.
Yani birinci durum, bu özyinelemeli Mutaz nesnesi zaten mevcut olduğuna dair kaydedilmediğinde, serbesttir.
Bu yüzden öncelikle, bu özel özyinelemeli mutaz nesnesinin ilk etapta günlüğe kaydedilmediğini açıklığa kavuşturan
bir if koşulu yazmamız gerekir.
Ancak bu özyinelemeli muteks nesnesinin durumunu incelediğimiz için, bu özyinelemeli muteks nesnesi üzerinde her türlü
incelemeyi birbirini dışlayan şekilde yapmamız gerekir.
Bu yüzden yapacağım ilk şey muteksi günlüğe kaydetmek olacaktı.
Şu anda hepsi doğru olan bu ifade, bana bu belirli kozmetik nesnesinin zaten kaydedilip kaydedilmediğini
söyleyen if koşulunu yazardım.
Rick ya da Cimarex itiraz ederse?
Ve sen.
Sıfıra eşittir.
Bu, söz konusu özyinelemeli muteks nesnesinin serbest olduğu ve kullanılabilir olduğu anlamına gelir.
Bu durumda, bu belirli API'yi yürüten üçlü olan mevcut yürütme üçlüsüne bu özyinelemeli muteks nesnesi
üzerinde bir kilit verilmelidir.
Öyleyse, standart değişken alt bölgeleri ve mutex nesnesini, bu pervasız ve sessiz x nesnesi
üzerinde genellikle bir kilit ve kilitleme iş parçacığı olan aynı sayıda yansıtacak şekilde güncelleyelim.
Bu özel mantığı yürüten mevcut eğilim olacaktır.
Ve işimiz bitti.
Bu yüzden basitçe durum muteksinin kilidini açın.
Ve devam et.
Yani bu bir numaralı vakayı kapsıyor.
Ve şimdi tüm bu uygulamalarda, programa bazı özler koyacağımı unutmayın, böylece kodumuzda
bir hata olduğu anda programımız hemen çökecektir.
Burada bir tahmin koyduğumu görebilirsiniz çünkü bu muteks nesnesi herhangi bir iş parçacığı tarafından günlüğe kaydedilmediyse, kilitleme
iş parçacığının null olması gerektiği anlamına gelir.
Dolayısıyla, programınız bu saldırıda çökerse, özyinelemeli muteks nesneniz bir hata nedeniyle tutarsız
bir duruma girmiş demektir.
Bu nedenle mümkün olduğunca çok kaynak eklemekten çekinmeyin, böylece bir hata ortaya çıktığında bunu mümkün olan en kısa sürede yakalayabiliriz.
Ardından ikinci duruma, yani bu belirli özyinelemeli muteks nesnesinin mevcut tehdidin kendisi tarafından günlüğe kaydedildiği
duruma geliriz.
Peki özyinelemeli sessize alma işlemi gerçekleşirse durum ne olur?
Kilitleme tesisi tehdit türüne eşittir.
O zaman bu durumda ne yapmanız gerekiyor?
Basitçe, bu belirli iş parçacığının bir sonraki nesne üzerinde zaten almış olduğu günlük sayısını artırmanız ve yapılacak
başka bir şey olmadığını iade etmeniz gerekir.
Bu yüzden buraya bir alıntı koyacağım çünkü bu ve değeri burada sıfır olamaz ve yeni vergi durumunun kilidini
açmak için bu özyinelemeli mutex nesnesinde elde edilen mevcut günlük sayısını basitçe artıracağım.
Çünkü bu isteğin durum değişkenini, Murdochs nesnesini güncellemeyi tamamladık ve orada işimiz
bitti, bitti.
Böylece iki numaralı vakayı da ele almış olduk.
Ve şimdi üç numaralı duruma geliyoruz, yani bu mevcut glukozamin ördek nesnesi başka bir yol tarafından
yerleştirildiğinde, eğer koşul kayıtlar, bazı muteks kilidi
ve iş parçacığı bilinmiyorsa olacaktır.
Ve muteks kilitleme iş parçacığı I. D. mevcut yürütme tehdidine eşit değildir.
Yani bu, bazı kabileler tarafından günlüğe kaydedilen bazı yeni vergiler gerektirdiği anlamına
gelir, böylece birçoğunun söylediği şey, bir kabile başka bir üçlü tarafından zaten günlüğe kaydedilmiş olan özyinelemeli
muteks nesnesi üzerinde bir kilit elde etmeye çalıştığında, o zaman mevcut kabilem engellenmelidir, bu yüzden iş parçacığımı basitçe engelleyeceğim.
Bu yüzden öncelikle, bu tekrarlayan yeni vergi için engellenen tuzakların sayısını belirten
sayaçları artıracağım.
Ve sonra tehdit koşulunu çağıracağım.
Bekleyin ki yeni vergim bu koşul değişkeninde bloke edilsin.
Tamam.
Dolayısıyla 42 numaralı satırda, bir tür tüketici vergisi nesnesi üzerinde kilit elde etmeye çalışan mevcut
eğilimim engellenecektir.
Bunun nedeni de, bu kozmetik nesnenin sistemdeki bazı ticaret tarafından zaten kaydedilmiş olmasıdır.
Ve 43 numaralı satırı çalıştıracağım, bu özel koşul değişkeni başka bir tehdit tarafından bir sinyal
alacaktır.
Tamam.
Yani bu durum değişken üzerine bloglanmış olan kabilemden birinin uyanacağı anlamına geliyor.
Her şeyden önce, bu koşul değişkeninde oturum açtığım zamanların sayısını ayırt etmem gerekiyor çünkü
zamanlardan biri artık engellenen adımdan uyandı.
Ve bu sefer geri dönmeli ve bu belirli özyinelemeli muteks nesnesinin hala bazı iş parçacıkları tarafından kaydedilip kaydedilmediğini
tekrar test etmelidir.
Bunun için, eğer'i vahşi ile değiştirmeniz gerekir.
Bu kavramı zaten biliyoruz, değil mi?
Bu, sahte özetleri önlemek için yapılır.
Dolayısıyla, bu belirli özyinelemeli muteks nesnesi sistemdeki herhangi bir tehdit tarafından kaydedilmediğinde, kontrol faturası
46 numaralı satırı okur.
Bu, şu anda bu işlevi yürüten iş parçacığıma bu özyinelemeli Murdoch nesnesi üzerinde bir kilit verilmesi gerektiği
anlamına gelir.
Dolayısıyla kontrol, yalnızca bu özyinelemeli muteks nesnesi artık mevcut iş parçacığımız tarafından günlüğe kaydedilebildiğinde 46 numarayı
bırakacaktır.
Bu yüzden buraya bazı alıntılar koymama izin verin.
rand değeri sıfır olmalıdır.
Engelleme trafiği boş olmalıdır.
Ve şimdi mevcut trafiğe mutex nesnesinde bu istek üzerinde bir kilit verilmelidir.
Bu geri çağırma Cimarex'inin durum değişkenini buna göre güncelleyin.
Ve bu API'nin uygulanması ile işimiz bitti.
Tamam.
Bu yüzden bu API'nin her bir satırını ve neden bu üç durumu da kapsamamız gerektiğini açıklayacağım.
Sonunda, işin zor kısmı bu geniş döngüdür, eğer sahte uyanmanın ne olduğunu ve neden if yerine while'a
ihtiyacımız olduğunu bilmiyorsanız, muhtemelen sahte uyanma kavramını ele almanız gerekir.
Bu konuyu daha önceki bölümlerde ele almıştım.
Böylece mevcut yürütme üçlüsü koşul değişkeni üzerinde engellenmiş olarak kalacaktır.
Bu özyinelemeli muteks nesnesi mevcut iş parçacığımız tarafından günlüğe kaydedilebilecek hale gelene kadar, bu kadar basit.
Şimdi bir sonraki derste, videoda, Kilit Açma API'sinin uygulanmasını
tartışacağız, ancak sizden ricam bu API'yi kendi başınıza uygulamaya çalışmanızdır.
Yine, Kilit Açma API'sinde de aynı durum bir, durum iki ve durum üçü kapsamalıdır.