WEBVTT

00:08.330 --> 00:15.050
Şimdi kilit açma API'mizin uygulamasına başlayalım, bu API'de de tam olarak

00:15.050 --> 00:17.960
aynı üç durumu ele alacağız.

00:18.560 --> 00:25.400
Başlangıç olarak, özyinelemeli nesne için durum muteksini kilitleyerek başlayacağım çünkü kozmetik

00:25.400 --> 00:30.080
nesnesinin durum değişkenlerini inceleyecek ve güncelleyeceğiz.

00:30.740 --> 00:35.990
Ve unutmayın, bu kilitleme ve kilit açma API'leri sistemdeki birkaç iş parçacığı tarafından aynı anda çağrılacaktır.

00:36.860 --> 00:38.630
Şimdi bir numaralı vakaya gelelim.

00:41.440 --> 00:44.620
Hareket etmeye başladığında, bu nesne zaten kilitli değildir.

00:46.320 --> 00:48.480
Yani bunun koşulunu zaten biliyoruz.

00:52.060 --> 00:58.390
Yani bu durumda, mevcut tehdidimiz zaten kilidi açık olan özyinelemeli muteks nesnesinin kilidini açmaya çalışıyor.

01:01.240 --> 01:05.350
Yani basitçe, programınızın yapmaması gereken bir şeyi yaptığı anlamına gelir.

01:06.280 --> 01:13.300
Bu nedenle, programınızın mantıklı olmayan bir şey yapmaya çalıştığını, Amtrak'ın kilidini açmaya çalıştığını,

01:13.960 --> 01:21.730
zaten kilidi açık durumdayken nesnesiyle ilgili makalelerin kilidini açmaya çalıştığını iddia etmeyi seçerdim.

01:22.900 --> 01:25.870
Hiçbir işlem yapmamayı ve sadece yazmayı da seçebilirsiniz.

01:26.320 --> 01:33.760
Ancak ben katı biri olacağım ve programımın çökmesini tercih ederim çünkü geliştiricinin zaten kilidi açılmış özyinelemeli

01:34.150 --> 01:38.980
Nadex nesnesi üzerinde bir kilit açma API'si çağırmasını istemiyorum.

01:41.880 --> 01:47.320
Şimdi, söylenecek durum numarası, bir özyinelemeli muteks nesnesinin kendi kendini eğiten tarafından günlüğe kaydedildiğidir.

01:47.340 --> 01:50.220
Bu mantığı yürüten parça budur.

01:51.240 --> 01:53.450
Bunun koşulunu zaten biliyoruz.

01:57.250 --> 02:04.810
Yani bu durumda, tehdit artık mutex nesnesinde bu kayıtta elde ettiği yasalardan birini gerçekleştiriyor.

02:05.650 --> 02:14.530
O halde bir tahminde bulunalım çünkü ve değeri şu anda sıfır olamaz ve ve değerini azaltacağız ve bu, bu iş

02:14.530 --> 02:22.120
parçacığı tarafından bu özyinelemeli muteks nesnesi üzerinde alınan kilit sayısıdır.

02:23.620 --> 02:28.240
Şimdi de kilit sayısının ne kadar olduğunu test edeceğim.

02:33.640 --> 02:40.540
Hala sıfırdan büyük mü, o zaman ne yapmalıyım, bu işlevi yürüten bu özel tehdit ne yapmalı?

02:42.840 --> 02:48.000
Bu basitçe, mevcut eğilimin bir miktar endeksi daire üzerinde kilitli tutmaya devam etmek olduğu anlamına gelir.

02:48.630 --> 02:54.480
Eğer durum buysa, o zaman bu eyaletin yeni vergisinin kilidini açın ve iade edin.

02:58.690 --> 03:02.530
Mevcut yürütme üçlüsünün başka bir şey yapmasına gerek yok.

03:03.370 --> 03:08.160
Basitçe, müşteri desteleri nesnesi türünde aldığı kilit sayısını azaltır ve

03:08.170 --> 03:15.430
bu an değeri hala sıfırdan büyükse, mevcut yürütme üçlüsünün bu özyinelemeli muteks nesnesi üzerinde bir kilit biriktirmeye

03:15.430 --> 03:18.040
devam ettiği anlamına gelir.

03:18.460 --> 03:20.110
O yüzden geri dönün.

03:20.560 --> 03:21.150
İşimiz bitti.

03:22.270 --> 03:30.010
Ancak durum böyle değilse, yani mevcut yürütme iş parçacığı bu özyinelemeli muteks nesnesi üzerindeki tüm kilitleri serbest

03:30.010 --> 03:33.160
bıraktığında 76 numaralı başlığı atacağız.

03:34.300 --> 03:36.980
Bu durumda, bunu test etmeliyiz.

03:37.000 --> 03:38.920
Öyle olan başka bir konu var mı?

03:40.500 --> 03:44.400
Bu geri çağırma, bazı muteks nesneleri üzerinde bir kilit tutmak için bloglandı.

03:45.360 --> 03:48.240
Sistemde her zaman bir tür tehdit olabilir.

03:50.490 --> 03:55.410
Bu özyinelemeli muteks nesnesi onlar için kullanılabilir olmadığından engellendi.

03:57.030 --> 04:04.740
Bu durumda, bu özyinelemeli muteks nesnesi üzerinde engellenen iş parçacığı sayısının sıfırdan büyük

04:04.740 --> 04:08.280
olması koşulunu test ederek bunu yapabiliriz.

04:09.530 --> 04:19.100
O zaman basitçe, mevcut yürütme iş parçacığı bir sinyal yayınlayabilir, böylece bu belirli koşul değişkeninde

04:20.000 --> 04:28.040
engellenen iş parçacıkları arasından tam olarak bir iş parçacığı yürütmeye başlayabilir.

04:29.120 --> 04:34.820
Bu ipliklerden tam olarak bir tanesi 42 numaralı satırın ötesinde parçalanacaktır.

04:36.100 --> 04:36.520
Tamam.

04:38.590 --> 04:42.970
Ve şimdi mevcut yürütme ticaretimizin işi bitti.

04:43.720 --> 04:49.270
Dolayısıyla, bu özyinelemeli izi günlüğe kaydedilmediği için işaretleyeceğiz.

04:50.900 --> 04:55.490
Sistemdeki başka herhangi bir iplik tarafından, çünkü şimdi tamamen serbest bırakıldı.

04:57.140 --> 05:03.530
Bu yüzden kilitleme iş parçacığının kilidi başlattığını ve tekrar sıfırlamayı denediğini ve iki numaralı durumla işimizin bittiğini

05:03.530 --> 05:04.790
söyleyebilirim.

05:07.570 --> 05:13.600
İşin zor kısmı şu ki, kilitli bir iş parçacığı bu özyinelemeli muteks nesnesi üzerindeki tüm kilitlerini

05:13.600 --> 05:19.690
serbest bıraktığında, mevcut iş parçacığı üzerindeki çağıran iş parçacığı, bu özyinelemeli muteks

05:19.690 --> 05:27.460
nesnesi üzerinde bir kilit elde etmek için engellenmiş herhangi bir iş parçacığı olup olmadığını test etmelidir, o zaman mevcut

05:27.460 --> 05:35.560
iş parçacığımız bir sinyal vermelidir, böylece bu koşul değişkeni üzerindeki engellenmiş iş parçacıkları arasından tam olarak biri

05:35.920 --> 05:43.660
yürütmeyi sürdürmeye çalışabilir ve bu özyinelemeli Murdock nesnesi üzerindeki kilidi başarıyla almaya çalışabilir.

05:44.950 --> 05:47.470
Ve üç numaralı vaka çok kolay.

05:50.960 --> 05:55.400
Üç numaralı vakaya girdiğimizi belirten koşulu zaten biliyoruz.

05:55.940 --> 06:03.470
Bu, söz konusu kozmetik nesnesinin sistemdeki başka bir iş parçacığı tarafından kilitlendiği zamandır.

06:04.040 --> 06:11.090
Peki böyle bir durumda, mevcut iş parçacığımız neden bu özyinelemeli Murdock's nesnesi üzerinde bir kilit açma API'si çağırsın?

06:12.260 --> 06:12.680
Tamam.

06:13.040 --> 06:19.850
Mevcut iş parçacığı ilk etapta kendisine ait olmadığı halde neden talep edilmemiş muteks nesnesinin kilidini açmaya

06:19.850 --> 06:20.990
çalışıyor?

06:22.520 --> 06:24.030
Ben de Seattle'ı aradım.

06:26.000 --> 06:29.420
Tabii ki size ait olmayan bir aracı satamazsınız.

06:29.810 --> 06:33.170
Size ait olmayan bir mülkü satamazsınız.

06:34.100 --> 06:40.070
Dolayısıyla, üzerinde kilidiniz bile olmayan özyinelemeli yansıtılmış bir nesnenin kilidini açamazsınız.

06:41.840 --> 06:42.290
Tamam.

06:43.160 --> 06:47.840
Böylece kayıt muteks kilit açma API'mizin uygulaması tamamlanmış oldu.

06:51.940 --> 06:58.540
Ve burada bir kitap var, buradan geri dönmemiz gerekiyor çünkü iki numaralı vakayı tamamlıyor.

07:00.150 --> 07:04.950
Son olarak, Kızıl Haç ve Nuedexta grev API'sini tartışacağız.

07:06.390 --> 07:09.100
Şimdi bu API'nin uygulanması oldukça basittir.

07:09.120 --> 07:13.080
Tek yapmanız gereken kontrol etmek.

07:15.240 --> 07:21.030
Bu geri çağırma işlemini hâlâ elinde tutan bir kabile olmamalı, Cimarex.

07:21.630 --> 07:25.950
Zirve eylemlerine kilitlenen bir üçlü olmamalıdır.

07:26.830 --> 07:32.230
Ve aslında bu kayıt üzerinde kilit bekleyen bir iş parçacığı olmamalıdır, bazı yeni parçalar, tüm bu

07:32.950 --> 07:38.620
koşullar yerine getirilirse, o zaman sadece kayıtları ve mutex nesnesini yok etmenize izin verilir.

07:39.400 --> 07:41.530
Bu yüzden her zaman buna dikkat etmelisiniz.

07:41.530 --> 07:47.680
Sessiz vergileri yok edersiniz ve değerli eşyaları yalnızca sistemdeki bir davetsiz misafir tarafından kullanılmadıkları zaman koşullandırırsınız.

07:48.400 --> 07:50.890
Aksi takdirde, tanımlanmamış davranışa yol açacaktır.

07:52.680 --> 07:58.290
Pekala, bu koşul değişkeni üzerinde engellenen bir işlem olduğunu ve bu koşul değişkeninin yığın

07:58.290 --> 08:00.180
bellekte olduğunu varsayalım.

08:01.080 --> 08:05.340
Ve sistemdeki ticaretin bir kısmının bu koşul değişkeninin hafızasını serbest bıraktığını varsayalım.

08:05.910 --> 08:10.770
Yani bu, engelleme tehdidinin artık var olmayan koşul değişkeni üzerinde engellediği anlamına gelir.

08:11.890 --> 08:16.420
Yani tanımlanmamış bir davranış programına, çökmeye veya başka bir şeye yol açar.

08:17.140 --> 08:24.280
Bu nedenle, sistemdeki bir nesnenin özyinelemeli muteks türünü her zaman yalnızca sistemdeki hiçbir üçlünün gerçekten

08:24.280 --> 08:27.160
beklemediğinden emin olunduğunda yok edin.

08:28.160 --> 08:31.010
Bu özel başvuru muteks nesnesini kullanıyor.

08:31.880 --> 08:35.590
Böylece Mutex Destroyer'da bu isteğin uygulanması tamamlanır.

08:36.200 --> 08:44.690
Bu API'yi, yalnızca uygulamanın tüm iş parçacıklarını kapattığından emin olunduğunda çağrılacak şekilde

08:44.690 --> 08:48.620
çağırmak geliştiricinin sorumluluğundadır.

08:49.810 --> 08:50.260
Tamam.

08:51.520 --> 08:58.210
Bu özyinelemenin uygulanmasıydı, Murdoch bir sonraki derste dört API'yi de uyguladığımızı

08:58.210 --> 08:59.430
söylüyor.

08:59.710 --> 09:07.060
Özyinelemeli Maddox'ların kullanımını gösteren bir demo uygulama yazalım.
