WEBVTT

00:07.160 --> 00:12.140
Evet arkadaşlar, şimdi API'lerin yeniden yazma günlükleri üzerindeki uygulamasını açıklayacaktık.

00:12.800 --> 00:20.510
Bu nedenle, her zamanki gibi, çok temel API anahtarları any day API ve Destroy API hakkında tartışmaktan kaçınacağım.

00:21.440 --> 00:21.890
Tamam.

00:22.280 --> 00:23.510
Bu API'ler basittir.

00:23.510 --> 00:31.790
DNA yapısının tüm üyelerini, RW kilidini ve Destroy API'sinde mutantları ve genel olarak koşulu yok

00:31.790 --> 00:35.990
etmeniz gerektiği için başlatmanız yeterlidir.

00:37.390 --> 00:44.680
Ve sadece bu okuma hakkı kilidi nesnesinin sistemdeki herhangi bir iş parçacığı tarafından kullanılmadığından

00:44.680 --> 00:53.950
yüzde 100 emin olunduğunda okuma hakkı kilidi nesnesi üzerinde destroyer API'sini çağırmanın geliştiricinin sorumluluğunda olduğunu

00:53.950 --> 00:55.210
unutmayın.

00:55.840 --> 01:02.740
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

01:02.740 --> 01:04.120
anlamına gelir.

01:04.750 --> 01:12.010
Bu Destroy API'de görebileceğiniz gibi, bu okuma hakkı kilidi nedeniyle engellenmesi gereken bir okuyucu veya yazma

01:12.010 --> 01:13.930
iş parçacığı olmamalıdır.

01:14.050 --> 01:22.540
Bu assert kontrolleri, geliştiricilerin bu yok etme API'sini yalnızca sistemde bu okuma hakkı kilit nesnesini herhangi bir

01:22.540 --> 01:30.010
şekilde kullanan bir tehdit olmadığından emin olunduğunda çağırmaya özen gösterdiğinden emin olacaktır.

01:30.700 --> 01:31.120
Tamam.

01:31.330 --> 01:36.160
Okuma hakkı kilidi nesnesini yok etmek geliştiricinin sorumluluğundadır.

01:36.160 --> 01:43.420
Yalnızca bu kök sağ kilit nesnesi şu anda kullanılmadığında, diğer üç API'nin yani okuma, kilitleme,

01:43.420 --> 01:48.130
sağ, kilitleme ve kilidi açma uygulamasına gelir.

01:48.640 --> 01:52.270
İşte bu API'leri ayrıntılı olarak ele alacağım.

01:54.910 --> 01:59.410
Evet, arkadaşlar, bu yeniden kilitleme API'sinin uygulanmasıyla başlayalım.

01:59.980 --> 02:09.640
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.

02:10.120 --> 02:10.540
Tamam.

02:10.810 --> 02:15.460
Dolayısıyla, bu API'yi çağıran bir iş parçacığının bir okuyucu tehdidi olduğu açıktır.

02:16.390 --> 02:22.930
Yani iş parçacığı bu API'yi çağırdığında, bu iş parçacığının durumunu incelememiz gerekir, değil mi?

02:22.930 --> 02:23.860
Kilit nesnesi mi?

02:24.430 --> 02:24.880
Tamam.

02:25.150 --> 02:30.580
Ve bu kök sağ kilit nesnesinin durumunu birbirini dışlayan bir şekilde incelememiz gerekir.

02:31.480 --> 02:37.030
Bu yüzden yapacağımız ilk şey mute muteksini kilitlemek olacaktır.

02:44.810 --> 02:45.110
Tamam.

02:45.420 --> 02:52.230
Yani yazacağımız tüm kodlar kilitleme ve kilit açma alanları arasında yer alacaktı.

02:55.140 --> 02:55.530
Tamam.

02:56.160 --> 02:59.490
Şimdi üç vakayı tartışacağız, bir numaralı vaka.

03:04.270 --> 03:10.270
Sağ okuma kilidi nesnemiz mevcuttur.

03:12.460 --> 03:14.020
İki numaralı vaka diyor ki.

03:19.500 --> 03:31.320
Yeniden yazma kilidi nesnemiz okuyucular tarafından kaydedildiğinde, tehdit ve üç numaralı durum, bu yeniden yazma kilidi

03:34.800 --> 03:40.940
nesnesinin hakkımız tarafından ne zaman sevildiğini söyler.

03:43.290 --> 03:46.230
Dolayısıyla bu üç vakayı tek tek ele almamız gerekiyor.

03:47.040 --> 03:49.950
Öyleyse bir numaralı vakayı ele almak için uygulamayı yapalım.

03:50.310 --> 03:54.750
Yani bir numaralı C durumu, bu belirli yeniden yazma kilidi nesnesinin kullanılabilir olması mı?

03:55.320 --> 04:02.280
Yani, bu API'yi çağıran ve doğru kilit nesnesinin durumunu inceleyen

04:02.280 --> 04:07.560
iş parçacığına bir kilit verilmelidir.

04:08.190 --> 04:08.610
Tamam.

04:10.710 --> 04:16.830
Bu nedenle, öncelikle bu belirli okuma hakkı kilidi nesnesinin kullanılabilir olduğunu belirten bir koşul

04:16.830 --> 04:19.680
yazmamız gerekir ve böyle bir koşul olacaktır.

04:27.990 --> 04:33.870
Reid sağ kilit nesnesi Reid tarafından kilitlenirse düşmeye eşittir ve yazar tarafından

04:37.320 --> 04:40.800
günlüğe kaydedilirse de yanlışa eşittir.

04:42.450 --> 04:42.840
Tamam.

04:43.290 --> 04:49.650
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.

04:50.280 --> 04:56.190
Şimdi, mümkün olduğunca çok sayıda sunucu yerleştireceğimizi söylediğim gibi, böylece hatalı koşulu

04:56.190 --> 05:00.050
veya hata koşulunu ortaya çıkar çıkmaz yayınlayabileceğiz.

05:01.750 --> 05:05.290
Yani bu koşul doğru olduğunda, basitçe şu anlama gelir.

05:12.450 --> 05:18.150
Kritik bölümde yürütülen deneme sayısı sıfır olmalıdır, eğer sıfır değilse,

05:18.570 --> 05:23.310
yeniden denenen blok nesnemizin durumu da tutarsızdır.

05:29.980 --> 05:31.590
Ayak basma hakkı olmamalıdır.

05:32.320 --> 05:36.190
Bu doğru doktrindir ve sıfır olmalıdır.

05:37.180 --> 05:43.270
Dolayısıyla bu iki saldırı, tutarsız durum yerine doğru kilit nesnesini okumamı sağladı.

05:43.750 --> 05:49.570
Eğer mevcut değilse, bu sadece kritik bölümde çalışan tehdit sayısının sıfır olması gerektiği

05:49.570 --> 05:54.070
ve kilidin herhangi bir tehdit hakkına atanmadığı anlamına gelir.

05:54.580 --> 06:00.940
Şimdi bu if cümlesine girdiğimize göre, bu sadece bu kilidin mevcut olduğu anlamına

06:00.940 --> 06:09.250
gelir ve yapmamız gereken bir sonraki şey, bu API'yi yürüten mevcut üçlüye bu sağ okuma kilidi nesnesi üzerinde

06:09.250 --> 06:11.830
kırmızı bir kilit vermektir.

06:12.340 --> 06:13.950
Peki ne yapacağız?

06:13.960 --> 06:21.400
Bu kök sağ kilit nesnesinin durumunu, göz ardı etme kilidi nesnesine bir yeniden yükleme tehdidine

06:21.400 --> 06:27.220
kilit verildiğini yansıtacak şekilde güncelleyecek miyiz?

06:28.120 --> 06:33.400
Bu nedenle, öncelikle kritik bölümde çalıştırılacak tuzak sayısı bir olarak uygulanacaktır.

06:34.810 --> 06:42.610
Ve şimdi bu rota sağ kilit nesnesine orijinal iş parçacığına erişim verildiğini biliyoruz.

06:43.180 --> 06:50.290
Bu nedenle, okuyucu tarafından kilitlenen değişkeni çiğnemek için güncelleyeceğim ve işim bitti.

06:51.290 --> 06:57.010
Bu yüzden eyaletin yeni vergisini buradan kaldırır ve geri dönerdim.

06:57.200 --> 06:59.120
Yani bu bir numaralı vakayı kapsıyor.

07:00.680 --> 07:07.880
Ben sadece mülkü inceliyorum, bu da bana kütüğün gerçekten mevcut olduğunu söylüyor.

07:08.480 --> 07:14.840
Ve sonra, kilit gerçekten mevcutsa, geri kalan üyelerin belirli bir değere sahip olması gerektiğini

07:14.840 --> 07:18.680
doğrulamak için basitçe bazı assert'ler koydum.

07:19.130 --> 07:20.480
Ve sonra devam ediyorum.

07:20.480 --> 07:28.640
Bu yanıtlanan kilit nesnesinin durumunu, göz ardı edilen kilit nesnesine bir perakende tehdidine erişim verildiğini

07:29.120 --> 07:33.200
yansıtacak şekilde güncellemem gerekiyordu.

07:34.220 --> 07:36.080
Yani bu bir numaralı vakayı kapsıyor.

07:36.440 --> 07:38.510
Şimdi iki numaralı vakaya gelelim.

07:39.800 --> 07:46.280
Bu yüzden yine, bana bu kural dreadlock nesnesinin aslında bir veya daha fazla perakende iş parçacığı tarafından

07:46.280 --> 07:49.700
günlüğe kaydedildiğini söyleyen if koşulunu koyacağım.

07:51.020 --> 07:52.700
Dolayısıyla böyle bir koşul çok basit

07:59.000 --> 07:59.820
olacaktır.

07:59.840 --> 08:02.360
Okuyucu tarafından kaydedilmiş olması doğru olacaktır.

08:03.140 --> 08:05.030
O yüzden yine bazı alıntılar yapmama izin verin.

08:13.120 --> 08:22.090
Açıkçası, kilit orijinal iş parçacığına verilmişse, o zaman bir kilit ve iz hakkına verilemez.

08:22.660 --> 08:26.290
Yani bu kilit şu anda yanlış olmak zorunda.

08:32.240 --> 08:35.990
Açıkçası, kilit açma değeri sıfır olamaz.

08:37.160 --> 08:39.470
Bire eşitten büyük olmalıdır.

08:45.850 --> 08:49.120
Açıkçası, izleme hakkı olmayacaktır.

08:51.850 --> 08:58.690
Ve şimdi, bir aramadan sonra, Jack, bu kırmızı ışık bloğu nesnesinin durumunu, bir kilidin başka

08:58.690 --> 09:03.410
bir okuyucuya verildiğini yansıtacak şekilde güncelleyeceğim.

09:04.720 --> 09:12.820
Bu yüzden yapacağım şey, kilit açma değerini bir arttırmak olacaktır çünkü bu kilide erişim hakkı verilen

09:12.820 --> 09:16.900
iş parçacığı sayısı bir arttırılacaktır.

09:17.980 --> 09:24.160
Bu kilit zaten yazılı tehdit tarafından kilitlenmişti ve şimdi bir uzak tehdit daha kritik

09:24.160 --> 09:25.180
bölüme girdi.

09:26.080 --> 09:32.910
Yani basitçe, iki numaralı vaka ile işim bitti ve devletin yeni vergisinin kilidini açacağım ve işlerin oldukça

09:34.360 --> 09:36.130
basit olduğunu göreceğim.

09:37.510 --> 09:44.860
Ve şimdi bu if cümlesinin özyinelemeli olma özelliğini de kapsadığını unutmayın, eğer aynı iş parçacığı bu

09:44.860 --> 09:51.940
rota sağ kilit nesnesi üzerinde okuma günlüğünü elde etmeye çalışırsa, bir günlüğün değerini tekrar artıracağız

09:51.940 --> 09:55.540
ve bir iş parçacığı engellenmeyecektir.

09:56.230 --> 10:02.530
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

10:02.530 --> 10:03.070
gelir.

10:04.330 --> 10:06.370
Şimdi üç numaralı davaya geliyorlar.

10:06.400 --> 10:15.010
Bu baskın hakkı kilit nesnesinin bir tehdit hakkı tarafından kaydedildiğini belirten son durumdur.

10:16.240 --> 10:26.560
Peki, şu anda sağ kilit tarafından okunursa aynı if koşulu ne olacaktır, bazı assert koşulları

10:26.560 --> 10:27.940
koyayım.

10:31.720 --> 10:39.940
Açıkçası, kilit açma değerinin bire eşitten büyük olması gerekir çünkü okuyucu veya dışarıdaki sağ aynı

10:39.940 --> 10:44.800
günlüğü yinelemeli olarak birden fazla kez seçebilir.

10:47.090 --> 10:51.930
Açıkçası, zamanın bu noktasında, bu kural, doğru kilit nesnesi doğru yol tarafından kaydedilir.

10:53.120 --> 10:58.970
Bu kural sağ kilit nesnesinin herhangi bir okuyucu izi tarafından kaydedilemeyeceği anlamına gelir.

11:04.960 --> 11:10.270
Ve bu kural nedeniyle, sağ kilit nesnesi bu noktada tehdit değil, sağ tarafından kaydedilir.

11:13.020 --> 11:15.390
O yüzden hemen bir şeyler olmalı.

11:17.320 --> 11:19.930
Dolayısıyla hakkın değeri, tehdit sıfır olamaz.

11:20.170 --> 11:27.280
Bu, aslında bu sağ kilit nesnesi üzerinde bir kilit tutan üçlünün ticaret fikrine eşit olacaktır.

11:28.210 --> 11:36.010
Şimdi geri arama yaptıktan sonra yapacağım bir sonraki şey, perakende tuzaklarının sayısını

11:37.750 --> 11:39.490
artırmak olacak.

11:42.510 --> 11:44.430
Bu kilidi bekliyorum.

11:46.130 --> 11:52.070
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

11:52.070 --> 11:54.170
elde etmeye çalıştığını unutmayın.

11:54.920 --> 11:56.060
Peki o zamana kadar?

11:57.600 --> 11:59.970
66'da çizgiye ulaştım.

12:01.080 --> 12:06.600
Bu sağ kilit nesnesinin deneme hakkı tarafından zaten kaydedilmiş olduğu gösterilmiştir.

12:07.260 --> 12:13.500
Yani bu, mevcut trademizin bu rotaya, doğru kilit nesnesine ve ellere kilitlenemeyeceği anlamına gelir.

12:13.500 --> 12:16.440
Okumam engellenmiş olmalı.

12:17.550 --> 12:21.630
Bu yüzden basitçe bir API iş parçacığı koşulu beklemesi çağıracağım ve okuyucu

12:25.830 --> 12:27.720
iş parçacığımı engelleyeceğim.

12:33.330 --> 12:33.810
Tamam.

12:34.980 --> 12:40.630
Ve benim okuduğum ipliğin kilidi açılıyor ve 68 numaralı satıra gidiyordu.

12:40.650 --> 12:45.900
Bu, engellenen iş parçacığından birinin yürütmeye devam ettiği anlamına gelir.

12:46.560 --> 12:54.240
Bu yüzden bir kez daha bu kilidi bekleyen iş parçacığı sayısını azaltacağım.

12:55.320 --> 12:57.900
Yani bir dizi bekleyen okuyucu ipliği.

12:58.890 --> 13:04.560
Ve yapacağım bir diğer şey de bunu daha geniş bir sahte uyanışa dönüştürmek.

13:06.160 --> 13:06.520
Tamam.

13:07.610 --> 13:14.960
Şu ana kadar altmış ila altmış dokuz numaralı satırlarda, okuyucu öncelikli olarak bu rota üzerinde bir kilit elde etmeye çalışırsa,

13:14.960 --> 13:20.960
sağ kilit nesnesi ve bu okunan sağ kilit nesnesi zaten bir sağ tarafından kaydedilmişse, okuyucu iş parçacığımın

13:20.990 --> 13:24.710
engellenmesi gerektiğini söylüyor.

13:25.460 --> 13:34.130
Ve bloklamadan önce, okuma hakkı kilidi nesnem üzerinde bir kilit elde etmek için bekleyen okuyucu iş parçacıklarının

13:34.130 --> 13:37.040
sayısını artırmam gerekiyor.

13:38.620 --> 13:39.070
Tamam.

13:40.680 --> 13:49.350
Dolayısıyla, yalnızca bu beyaz koşul yanlış olduğunda 71 numaralı satıra ulaşacağım.

13:49.800 --> 13:55.560
Ve bu vahşi koşul düştüğünde ve bu vahşi koşul yanlış olduğunda, bu Wright kilit nesnesinin

13:55.560 --> 14:01.380
en azından herhangi bir hak veya tehdit tarafından kilitlenmediği anlamına gelecektir.

14:02.190 --> 14:08.670
Bu kırmızı kilit nesnesi bir okuyucu tehdidi tarafından kullanılabilir veya kilitlenmiş olabilir.

14:09.810 --> 14:17.340
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.

14:18.180 --> 14:18.570
Tamam.

14:19.110 --> 14:23.580
Şimdi burada, kritik bölümü yürüten tehditlerin sayısı sıfırsa,

14:27.540 --> 14:33.780
bunun basitçe şu anda bu kuralın kilit nesnesinin mevcut olabileceği ve tehdidin

14:33.780 --> 14:40.450
ilk kuralı olduğu, yani mevcut tehdidin şu anda bu doğru kilit nesnesi üzerinde bir kilit

14:40.470 --> 14:47.820
elde etmeye çalışan gerçek bir tehdit olduğu anlamına geldiğini kontrol edeceğim.

14:48.600 --> 14:52.650
Dolayısıyla, bu kritik bölüme girmek tehdidin ilk kuralı olacaktır.

14:54.180 --> 15:03.540
Yani W kilidimiz, Marino'nun denediği bu kilit, doğru olmayacaktır ya da bu koşul yanlış olabilir.

15:04.570 --> 15:10.630
Bu durumda, bir oylamanın başına gelen şey basitçe bu sağ kilit nesnesinin zaten bazı son perakende tehditleri tarafından

15:10.630 --> 15:12.910
kilitlendiği anlamına gelir.

15:14.300 --> 15:14.720
Tamam.

15:15.290 --> 15:24.680
Mevcut tehdidim aynı zamanda gerçek bir tehdit olduğu için, devam edeceğim ve analogların değerini bir artıracağım.

15:27.530 --> 15:30.230
Ve sonra açıkçası, zamanın bu noktasında, bu kural dreadlock

15:32.840 --> 15:39.290
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ı

15:39.290 --> 15:41.240
ezoterik şeyler koyabilirsiniz.

15:42.410 --> 15:48.710
Bu kütük nesnesi üzerinde bir kütük tutan yargılama hakkı olmayacaktı ve biz sadece kilidi açtık, Miramax'ın

15:48.710 --> 15:51.110
tozunu aldık ve işimiz bitti.

15:51.590 --> 15:55.580
Böylece bu yeniden kilitleme API'sinin uygulaması tamamlanmış olur.

15:56.060 --> 16:01.910
Okuma hakkı kilidi nesnesinin okuyucular tarafından baştan sona günlüğe kaydedilmesinden daha

16:01.910 --> 16:04.090
uygun olan üç durumu da ele aldık.

16:04.130 --> 16:10.520
Bir veya daha fazla okuyucu olabilir ve okuma hakkı kilidi nesnesi bir yazar tarafından zaten okunmak üzere kaydedildiğinde.

16:11.800 --> 16:18.010
Burada dikkat edilmesi gereken özel bir husus da, 71 numaralı satıra ulaştığınızda,

16:18.010 --> 16:25.990
sadece kilit nesnesinin herhangi bir hak tarafından kilitlenmediğinden emin olmanızdır.

16:26.500 --> 16:27.580
Bırak da yazayım.

16:28.660 --> 16:37.210
Ya okuma yazma kilidi nesnesi kullanılabilir durumdadır ya da zaten tarafından lobi yapılmaktadır.

16:39.290 --> 16:47.650
Riddle'ın tehdidi herhangi bir sayıda Runeterra olabilir, bu nedenle bu Reid Lock API'sinin uygulanmasını tamamlar ve

16:47.770 --> 16:53.890
şimdi bir sonraki ders videosunda Right Lock API'sinin uygulanmasını tartışacağız ve

16:53.890 --> 17:01.240
sizden bu iki API'nin uygulanmasını tamamlamayı denemenizi ve ardından çözümünüzün doğru olduğundan emin

17:01.240 --> 17:06.910
olmak için yalnızca sonraki ders videolarıma başvurmanızı bekliyorum.
