Evet arkadaşlar, şimdi API'lerin yeniden yazma günlükleri üzerindeki uygulamasını açıklayacaktık.
Bu nedenle, her zamanki gibi, çok temel API anahtarları any day API ve Destroy API hakkında tartışmaktan kaçınacağım.
Tamam.
Bu API'ler basittir.
DNA yapısının tüm üyelerini, RW kilidini ve Destroy API'sinde mutantları ve genel olarak koşulu yok
etmeniz gerektiği için başlatmanız yeterlidir.
Ve sadece bu okuma hakkı kilidi nesnesinin sistemdeki herhangi bir iş parçacığı tarafından kullanılmadığından
yüzde 100 emin olunduğunda okuma hakkı kilidi nesnesi üzerinde destroyer API'sini çağırmanın geliştiricinin sorumluluğunda olduğunu
unutmayın.
Bu basitçe, okuma yazma kilidi tarafından korunan kritik bölümde çalışan iş parçacığı sayısının sıfır olması gerektiği
anlamına gelir.
Bu Destroy API'de görebileceğiniz gibi, bu okuma hakkı kilidi nedeniyle engellenmesi gereken bir okuyucu veya yazma
iş parçacığı olmamalıdır.
Bu assert kontrolleri, geliştiricilerin bu yok etme API'sini yalnızca sistemde bu okuma hakkı kilit nesnesini herhangi bir
şekilde kullanan bir tehdit olmadığından emin olunduğunda çağırmaya özen gösterdiğinden emin olacaktır.
Tamam.
Okuma hakkı kilidi nesnesini yok etmek geliştiricinin sorumluluğundadır.
Yalnızca bu kök sağ kilit nesnesi şu anda kullanılmadığında, diğer üç API'nin yani okuma, kilitleme,
sağ, kilitleme ve kilidi açma uygulamasına gelir.
İşte bu API'leri ayrıntılı olarak ele alacağım.
Evet, arkadaşlar, bu yeniden kilitleme API'sinin uygulanmasıyla başlayalım.
Dolayısıyla, öncelikle bu API, bu okuma yazma aşk nesnesi üzerindeki okuma günlüğünü elde etmek isteyen Outride tarafından kullanılacaktır.
Tamam.
Dolayısıyla, bu API'yi çağıran bir iş parçacığının bir okuyucu tehdidi olduğu açıktır.
Yani iş parçacığı bu API'yi çağırdığında, bu iş parçacığının durumunu incelememiz gerekir, değil mi?
Kilit nesnesi mi?
Tamam.
Ve bu kök sağ kilit nesnesinin durumunu birbirini dışlayan bir şekilde incelememiz gerekir.
Bu yüzden yapacağımız ilk şey mute muteksini kilitlemek olacaktır.
Tamam.
Yani yazacağımız tüm kodlar kilitleme ve kilit açma alanları arasında yer alacaktı.
Tamam.
Şimdi üç vakayı tartışacağız, bir numaralı vaka.
Sağ okuma kilidi nesnemiz mevcuttur.
İki numaralı vaka diyor ki.
Yeniden yazma kilidi nesnemiz okuyucular tarafından kaydedildiğinde, tehdit ve üç numaralı durum, bu yeniden yazma kilidi
nesnesinin hakkımız tarafından ne zaman sevildiğini söyler.
Dolayısıyla bu üç vakayı tek tek ele almamız gerekiyor.
Öyleyse bir numaralı vakayı ele almak için uygulamayı yapalım.
Yani bir numaralı C durumu, bu belirli yeniden yazma kilidi nesnesinin kullanılabilir olması mı?
Yani, bu API'yi çağıran ve doğru kilit nesnesinin durumunu inceleyen
iş parçacığına bir kilit verilmelidir.
Tamam.
Bu nedenle, öncelikle bu belirli okuma hakkı kilidi nesnesinin kullanılabilir olduğunu belirten bir koşul
yazmamız gerekir ve böyle bir koşul olacaktır.
Reid sağ kilit nesnesi Reid tarafından kilitlenirse düşmeye eşittir ve yazar tarafından
günlüğe kaydedilirse de yanlışa eşittir.
Tamam.
Yani bu basitçe, bu emekli günlük nesnesinin bir okuyucu iş parçacığı ve try tarafından günlüğe kaydedilmediği anlamına gelir.
Şimdi, mümkün olduğunca çok sayıda sunucu yerleştireceğimizi söylediğim gibi, böylece hatalı koşulu
veya hata koşulunu ortaya çıkar çıkmaz yayınlayabileceğiz.
Yani bu koşul doğru olduğunda, basitçe şu anlama gelir.
Kritik bölümde yürütülen deneme sayısı sıfır olmalıdır, eğer sıfır değilse,
yeniden denenen blok nesnemizin durumu da tutarsızdır.
Ayak basma hakkı olmamalıdır.
Bu doğru doktrindir ve sıfır olmalıdır.
Dolayısıyla bu iki saldırı, tutarsız durum yerine doğru kilit nesnesini okumamı sağladı.
Eğer mevcut değilse, bu sadece kritik bölümde çalışan tehdit sayısının sıfır olması gerektiği
ve kilidin herhangi bir tehdit hakkına atanmadığı anlamına gelir.
Şimdi bu if cümlesine girdiğimize göre, bu sadece bu kilidin mevcut olduğu anlamına
gelir ve yapmamız gereken bir sonraki şey, bu API'yi yürüten mevcut üçlüye bu sağ okuma kilidi nesnesi üzerinde
kırmızı bir kilit vermektir.
Peki ne yapacağız?
Bu kök sağ kilit nesnesinin durumunu, göz ardı etme kilidi nesnesine bir yeniden yükleme tehdidine
kilit verildiğini yansıtacak şekilde güncelleyecek miyiz?
Bu nedenle, öncelikle kritik bölümde çalıştırılacak tuzak sayısı bir olarak uygulanacaktır.
Ve şimdi bu rota sağ kilit nesnesine orijinal iş parçacığına erişim verildiğini biliyoruz.
Bu nedenle, okuyucu tarafından kilitlenen değişkeni çiğnemek için güncelleyeceğim ve işim bitti.
Bu yüzden eyaletin yeni vergisini buradan kaldırır ve geri dönerdim.
Yani bu bir numaralı vakayı kapsıyor.
Ben sadece mülkü inceliyorum, bu da bana kütüğün gerçekten mevcut olduğunu söylüyor.
Ve sonra, kilit gerçekten mevcutsa, geri kalan üyelerin belirli bir değere sahip olması gerektiğini
doğrulamak için basitçe bazı assert'ler koydum.
Ve sonra devam ediyorum.
Bu yanıtlanan kilit nesnesinin durumunu, göz ardı edilen kilit nesnesine bir perakende tehdidine erişim verildiğini
yansıtacak şekilde güncellemem gerekiyordu.
Yani bu bir numaralı vakayı kapsıyor.
Şimdi iki numaralı vakaya gelelim.
Bu yüzden yine, bana bu kural dreadlock nesnesinin aslında bir veya daha fazla perakende iş parçacığı tarafından
günlüğe kaydedildiğini söyleyen if koşulunu koyacağım.
Dolayısıyla böyle bir koşul çok basit
olacaktır.
Okuyucu tarafından kaydedilmiş olması doğru olacaktır.
O yüzden yine bazı alıntılar yapmama izin verin.
Açıkçası, kilit orijinal iş parçacığına verilmişse, o zaman bir kilit ve iz hakkına verilemez.
Yani bu kilit şu anda yanlış olmak zorunda.
Açıkçası, kilit açma değeri sıfır olamaz.
Bire eşitten büyük olmalıdır.
Açıkçası, izleme hakkı olmayacaktır.
Ve şimdi, bir aramadan sonra, Jack, bu kırmızı ışık bloğu nesnesinin durumunu, bir kilidin başka
bir okuyucuya verildiğini yansıtacak şekilde güncelleyeceğim.
Bu yüzden yapacağım şey, kilit açma değerini bir arttırmak olacaktır çünkü bu kilide erişim hakkı verilen
iş parçacığı sayısı bir arttırılacaktır.
Bu kilit zaten yazılı tehdit tarafından kilitlenmişti ve şimdi bir uzak tehdit daha kritik
bölüme girdi.
Yani basitçe, iki numaralı vaka ile işim bitti ve devletin yeni vergisinin kilidini açacağım ve işlerin oldukça
basit olduğunu göreceğim.
Ve şimdi bu if cümlesinin özyinelemeli olma özelliğini de kapsadığını unutmayın, eğer aynı iş parçacığı bu
rota sağ kilit nesnesi üzerinde okuma günlüğünü elde etmeye çalışırsa, bir günlüğün değerini tekrar artıracağız
ve bir iş parçacığı engellenmeyecektir.
Bu, aynı okuma iş parçacığının aslında bu doğru kilit nesnesi üzerindeki okuma günlüğünü tekrar tekrar alabileceği anlamına
gelir.
Şimdi üç numaralı davaya geliyorlar.
Bu baskın hakkı kilit nesnesinin bir tehdit hakkı tarafından kaydedildiğini belirten son durumdur.
Peki, şu anda sağ kilit tarafından okunursa aynı if koşulu ne olacaktır, bazı assert koşulları
koyayım.
Açıkçası, kilit açma değerinin bire eşitten büyük olması gerekir çünkü okuyucu veya dışarıdaki sağ aynı
günlüğü yinelemeli olarak birden fazla kez seçebilir.
Açıkçası, zamanın bu noktasında, bu kural, doğru kilit nesnesi doğru yol tarafından kaydedilir.
Bu kural sağ kilit nesnesinin herhangi bir okuyucu izi tarafından kaydedilemeyeceği anlamına gelir.
Ve bu kural nedeniyle, sağ kilit nesnesi bu noktada tehdit değil, sağ tarafından kaydedilir.
O yüzden hemen bir şeyler olmalı.
Dolayısıyla hakkın değeri, tehdit sıfır olamaz.
Bu, aslında bu sağ kilit nesnesi üzerinde bir kilit tutan üçlünün ticaret fikrine eşit olacaktır.
Şimdi geri arama yaptıktan sonra yapacağım bir sonraki şey, perakende tuzaklarının sayısını
artırmak olacak.
Bu kilidi bekliyorum.
Bu API'nin orijinal iş parçacığı tarafından çağrıldığını ve bir iş parçacığının bu rewrite lock nesnesi üzerindeki okuma kilidini
elde etmeye çalıştığını unutmayın.
Peki o zamana kadar?
66'da çizgiye ulaştım.
Bu sağ kilit nesnesinin deneme hakkı tarafından zaten kaydedilmiş olduğu gösterilmiştir.
Yani bu, mevcut trademizin bu rotaya, doğru kilit nesnesine ve ellere kilitlenemeyeceği anlamına gelir.
Okumam engellenmiş olmalı.
Bu yüzden basitçe bir API iş parçacığı koşulu beklemesi çağıracağım ve okuyucu
iş parçacığımı engelleyeceğim.
Tamam.
Ve benim okuduğum ipliğin kilidi açılıyor ve 68 numaralı satıra gidiyordu.
Bu, engellenen iş parçacığından birinin yürütmeye devam ettiği anlamına gelir.
Bu yüzden bir kez daha bu kilidi bekleyen iş parçacığı sayısını azaltacağım.
Yani bir dizi bekleyen okuyucu ipliği.
Ve yapacağım bir diğer şey de bunu daha geniş bir sahte uyanışa dönüştürmek.
Tamam.
Şu ana kadar altmış ila altmış dokuz numaralı satırlarda, okuyucu öncelikli olarak bu rota üzerinde bir kilit elde etmeye çalışırsa,
sağ kilit nesnesi ve bu okunan sağ kilit nesnesi zaten bir sağ tarafından kaydedilmişse, okuyucu iş parçacığımın
engellenmesi gerektiğini söylüyor.
Ve bloklamadan önce, okuma hakkı kilidi nesnem üzerinde bir kilit elde etmek için bekleyen okuyucu iş parçacıklarının
sayısını artırmam gerekiyor.
Tamam.
Dolayısıyla, yalnızca bu beyaz koşul yanlış olduğunda 71 numaralı satıra ulaşacağım.
Ve bu vahşi koşul düştüğünde ve bu vahşi koşul yanlış olduğunda, bu Wright kilit nesnesinin
en azından herhangi bir hak veya tehdit tarafından kilitlenmediği anlamına gelecektir.
Bu kırmızı kilit nesnesi bir okuyucu tehdidi tarafından kullanılabilir veya kilitlenmiş olabilir.
Yani 71 numaralı satırda söyleyebileceğim tek şey, bu kırmızı kilit nesnesinin en azından gerçek bir tehdit tarafından kilitlenmemiş olduğudur.
Tamam.
Şimdi burada, kritik bölümü yürüten tehditlerin sayısı sıfırsa,
bunun basitçe şu anda bu kuralın kilit nesnesinin mevcut olabileceği ve tehdidin
ilk kuralı olduğu, yani mevcut tehdidin şu anda bu doğru kilit nesnesi üzerinde bir kilit
elde etmeye çalışan gerçek bir tehdit olduğu anlamına geldiğini kontrol edeceğim.
Dolayısıyla, bu kritik bölüme girmek tehdidin ilk kuralı olacaktır.
Yani W kilidimiz, Marino'nun denediği bu kilit, doğru olmayacaktır ya da bu koşul yanlış olabilir.
Bu durumda, bir oylamanın başına gelen şey basitçe bu sağ kilit nesnesinin zaten bazı son perakende tehditleri tarafından
kilitlendiği anlamına gelir.
Tamam.
Mevcut tehdidim aynı zamanda gerçek bir tehdit olduğu için, devam edeceğim ve analogların değerini bir artıracağım.
Ve sonra açıkçası, zamanın bu noktasında, bu kural dreadlock
nesnesi gerçek bir iş parçacığı tarafından günlüğe kaydedildiğinden, bu nedenle yanlış olacak şekilde günlüğe kaydedildiğinden, bazı
ezoterik şeyler koyabilirsiniz.
Bu kütük nesnesi üzerinde bir kütük tutan yargılama hakkı olmayacaktı ve biz sadece kilidi açtık, Miramax'ın
tozunu aldık ve işimiz bitti.
Böylece bu yeniden kilitleme API'sinin uygulaması tamamlanmış olur.
Okuma hakkı kilidi nesnesinin okuyucular tarafından baştan sona günlüğe kaydedilmesinden daha
uygun olan üç durumu da ele aldık.
Bir veya daha fazla okuyucu olabilir ve okuma hakkı kilidi nesnesi bir yazar tarafından zaten okunmak üzere kaydedildiğinde.
Burada dikkat edilmesi gereken özel bir husus da, 71 numaralı satıra ulaştığınızda,
sadece kilit nesnesinin herhangi bir hak tarafından kilitlenmediğinden emin olmanızdır.
Bırak da yazayım.
Ya okuma yazma kilidi nesnesi kullanılabilir durumdadır ya da zaten tarafından lobi yapılmaktadır.
Riddle'ın tehdidi herhangi bir sayıda Runeterra olabilir, bu nedenle bu Reid Lock API'sinin uygulanmasını tamamlar ve
şimdi bir sonraki ders videosunda Right Lock API'sinin uygulanmasını tartışacağız ve
sizden bu iki API'nin uygulanmasını tamamlamayı denemenizi ve ardından çözümünüzün doğru olduğundan emin
olmak için yalnızca sonraki ders videolarıma başvurmanızı bekliyorum.