WEBVTT

00:07.810 --> 00:15.880
Evet arkadaşlar, şimdi yeniden yazma kilidi işlevselliğini test edeceğimiz bir örnek program yazdım.

00:16.930 --> 00:17.370
Tamam.

00:17.380 --> 00:21.040
Yani son bir sınavım var, altını çizdiğim bir çalışma Nokta gördün mü?

00:22.090 --> 00:28.690
Bu yüzden yapacağım şey, ortak bir kritik bölüm oluşturmak ve bu kritik bölüme

00:28.690 --> 00:34.540
üç küçük kabile ve üç yazar dizisi yerleştirmeye çalışmak olacaktı.

00:35.320 --> 00:38.890
Elbette, bu kritik bölüm bir yeniden yazma günlüğü ile korunmaktadır.

00:39.640 --> 00:45.220
Ve benim gözlemim, kritik bölümde birden fazla okuyucu izi yürütüldüğünde, anlatıcı iş parçacığının

00:45.670 --> 00:52.750
kritik bölümde yürütülmesi ve bir yazar tuzağının kritik bölümde yürütülmesi gerektiği yönünde olmalıdır.

00:53.170 --> 00:57.550
Kritik bölümde başka hiçbir okuyucu iş parçacığı veya yazıcı iş parçacığı çalışmamalıdır.

00:58.060 --> 00:59.500
Bu benim gözlemim olmalı.

01:00.190 --> 01:07.840
Test programım bu davranışı gösterebilirse, okuma yazma günlüklerinin işlevselliğini doğrulayabiliriz.

01:08.710 --> 01:11.860
Yani örnek test programı bu şekilde yapılandırılmıştır.

01:11.890 --> 01:15.010
İzin verin sizi bu kısa programa götüreyim.

01:15.880 --> 01:22.510
Dolayısıyla, yürütme ortalamadan başladığından, yaptığım şey öncelikle bu altı iş parçacığından

01:22.510 --> 01:25.030
altı iş parçacığını almak oldu.

01:25.030 --> 01:30.970
İlk üç iş parçacığı okuma tuzakları, son üç iş parçacığı ise boşta kalma tuzaklarıdır.

01:31.810 --> 01:32.200
Tamam.

01:32.530 --> 01:37.960
Ve bu okunan sağ kilitli nesneyi global bir değişken olarak aldım.

01:37.990 --> 01:43.450
Burada global bir değişken görüyorsunuz ve ana fonksiyonda bu root right log nesnesini

01:43.450 --> 01:44.500
başlatıyorum.

01:45.310 --> 01:51.040
Bu yeni metnin açıklamasına daha sonra geleceğim ve altı konuyu da başlatıyorum.

01:51.730 --> 01:52.150
Tamam.

01:52.570 --> 01:59.230
İlk üç iş parçacığının aslında sonsuz döngüde kırmızı iş parçacığı işlevini yürüttüğünü ve küçük üç

01:59.230 --> 02:05.830
iş parçacığının gidip sağ iş parçacığı işlevini ve sonsuz döngüyü yürüteceğini görebilirsiniz.

02:06.970 --> 02:08.920
Yani bu iki fonksiyon burada.

02:09.400 --> 02:11.200
Bu doğru iplik işlevidir.

02:11.230 --> 02:12.730
Bu bir yönlendirme işlevidir.

02:13.600 --> 02:17.620
Gördüğünüz gibi konu başlıklarımı iki gruba ayırdım.

02:18.250 --> 02:24.010
İlk iş parçacığı kümesi okuma iş parçacığı işlevini yürütür ve sonraki iş parçacığı grupları sağ

02:24.370 --> 02:26.290
iş parçacığı işlevini yürütür.

02:26.980 --> 02:30.010
Şimdi bu iki fonksiyonun uygulanmasını tartışalım.

02:30.610 --> 02:34.240
Bu iki fonksiyonun uygulanması oldukça benzer ve basittir.

02:34.840 --> 02:38.980
Gördüğünüz gibi, bu okuma iş parçacığı işlevi sonsuz bir döngü içinde yürütülür.

02:39.640 --> 02:46.300
Ve iş parçacığı kritik bölüme girer girmez, 71'den 75'e kadar vurgulanan satır numarası

02:46.300 --> 02:54.910
kritik bölümü temsil eder ve okuma yazma kilidi nesnesinin okuma günlüğü tarafından korunur.

02:55.600 --> 03:03.370
Dolayısıyla, 71 numaralı satırdan 75 numaralı satıra kadar olan satır, tüm okuyucu sekmeleri tarafından

03:03.370 --> 03:10.880
aynı anda erişilecek olan kritik bir bölümdür, oysa sağ iş parçacığı işlevinde kritik bölüm 85 numaralı

03:10.880 --> 03:14.770
satırdan 89 numaralı satıra kadar değişir.

03:15.460 --> 03:23.290
Ve bu kritik bölüm sağ kilit tarafından korunduğundan, eşzamanlı üç sağ iş parçacığından yalnızca

03:23.380 --> 03:30.670
bir iş parçacığı herhangi bir zamanda bu kritik bölümün vurgulanan kısmını yürütecektir.

03:31.950 --> 03:37.830
Ayrıca, bu okuyucu kritik bölüme gir ve okuyucu kritik bölümden çık işlevlerini kullanarak okuyucu

03:37.830 --> 03:45.030
kritik bölüme gir ve okuyucu kritik bölümden çık gibi bazı işlev çağrıları yerleştirdiğimi de fark edebilirsiniz.

03:45.030 --> 03:47.040
Aslında takip ediyorum.

03:48.210 --> 03:54.540
Kritik bölümde kaç okuyucunun çalıştığıyla ilgili olarak, okuyucu kritik bölüme girdiğinde,

03:54.540 --> 03:57.630
bu tamsayı değişkenini artırıyorum.

03:58.850 --> 04:05.780
Ve okuyucu kritik bölümden ayrıldığında, bu Intisar kullanılabilirliğini azaltıyorum, böylece bir alt

04:05.810 --> 04:10.790
çizgi kritik bölümde kaç okuyucunun gerçekten yürütüldüğünü gösteriyor.

04:12.300 --> 04:15.060
Ve ne zaman değerini güncellemem gerekirse.

04:16.140 --> 04:22.020
Ve alt çizgi, bunu muteks kilidi koruması altında yapmam gerekiyor.

04:23.310 --> 04:29.580
Nedeni basit çünkü kritik bölümü çalıştıran birden fazla iş parçacığı var ve birden fazla

04:29.580 --> 04:38.100
okuyucu tuzağı tarafından çalıştırılan kritik bölüm içindeki herhangi bir tamsayı değerini güncelleyemiyorum.

04:38.580 --> 04:41.790
Sadece baskın operasyonları yapmam gerekiyordu ama işte buradayım.

04:41.790 --> 04:43.170
Daha sonra güncelleme yapılabilir.

04:43.800 --> 04:51.480
Bu nedenle, doğru işlemi gerçekleştiriyorum ve bu nedenle gerçekleştirebilmem için ekstra muteks korumasına

04:51.900 --> 04:52.980
ihtiyacım var.

04:53.520 --> 04:57.960
Bu alt çizginin güncellenmesi değişken değerimizdir.

04:59.120 --> 05:07.910
Güvenilir bir alt çizgi için durum böyle değilken, DeBlois yenilebilir kritik bölümü yürüten tüfek

05:07.910 --> 05:11.000
tuzaklarının sayısını sayar.

05:11.390 --> 05:17.450
Bu yüzden tüfek tehdidi kritik bölüme girer girmez API yazarını ve kritik bölümü çağırıyorum.

05:18.080 --> 05:23.690
Ve yazar iş parçacığı kritik bölümden ayrılır ayrılmaz, sağa veya kritik bölümden ayrıl API'sini çağırıyorum.

05:24.320 --> 05:27.020
Ve bu API'nin uygulanması oldukça basittir.

05:28.160 --> 05:34.520
Yeniden yazma kilidi nesnesi otomatik olarak kritik bölümün bu vurgulanan kısmının bir seferde en fazla bir

05:34.520 --> 05:38.000
iş parçacığı tarafından yürütülmesini sağlayacaktır.

05:38.510 --> 05:45.380
Bu nedenle, N değerini güncellemeye gerek yoktur. W. değişkeni ekstra muteks koruması altında.

05:47.210 --> 05:47.630
Tamam.

05:48.020 --> 05:53.330
Ve son olarak, CSS'yi yürüten işlev olan temel bir kritik bölümümüz var.

05:53.870 --> 06:01.940
Ve bu fonksiyonda, kritik bölümde kaç okuyucu iş parçacığı ve kaç yazar iş parçacığı yürütüldüğünü yazdırmaya

06:01.940 --> 06:03.710
çalışıyorum.

06:04.430 --> 06:07.460
Ve bunu aşırı kodeks koruması altında basacağım.

06:08.210 --> 06:08.630
Tamam.

06:08.900 --> 06:14.450
Çünkü bu işlev birden fazla eş zamanlı okuyucu iş parçacığı tarafından yürütülecektir.

06:14.990 --> 06:22.760
Dolayısıyla, bu değişkenlerin değerini okuyabilmem ve çıktı alabilmem için ekstra bir muteks korumasına

06:22.760 --> 06:23.900
ihtiyacım var.

06:24.380 --> 06:31.160
Sahne arkasındaki baskının tamponda doğru işlemi gerçekleştirdiğini her zaman unutmayın.

06:32.190 --> 06:38.160
Birden fazla kırsal teröristin faaliyet gösterdiği kritik bölümde, ekstra meyerriecks koruması olmadan

06:38.640 --> 06:40.620
sadece PRINTF kullanamazsınız.

06:41.850 --> 06:42.270
Tamam.

06:42.660 --> 06:49.830
Bu nedenle, programlarınızda hata ayıklama yaparken, birden fazla iş parçacığına izin verilen belirli kritik bölümlerde

06:50.370 --> 06:57.180
hata ayıklıyorsanız ve çevrimiçi ekstra muteks koruması olmadan bu kritik bölümlerde kullanamazsanız, buna

06:57.180 --> 06:58.970
dikkat edin.

06:59.700 --> 07:04.170
Aksi takdirde, ekranda bazı çöp baskılar veya çıktılar görürsünüz.

07:05.490 --> 07:09.330
Dolayısıyla bu program çıktı olarak bu satırları üretecektir.

07:10.800 --> 07:16.980
Yani bu programda genel olarak yaptığım şey, doğru iz kritik bölüme girdiğinde veya gerçek tehdit

07:17.730 --> 07:25.320
kritik bölüme girdiğinde veya çıktığında, bunları ve maviyi veya başka bir giyilebilir cihazı güncelliyorum.

07:26.290 --> 07:26.710
Tamam.

07:27.250 --> 07:32.410
Ve tehdit sonunda kritik bölümü idam ettiğinde, o zaman ben kritik bölümü değil sanayi öncesini

07:32.410 --> 07:32.980
seçtim.

07:34.180 --> 07:38.800
Okuyucu tehditlerini ve kritik bölümün güvenliğini sağlamaya yönelik doğru saldırıları eve yazdırarak, bu tüm

07:38.800 --> 07:39.460
programdır.

07:40.960 --> 07:42.970
Şimdi bu programı çalıştırırsanız.

07:44.500 --> 07:47.050
Şimdi programı derleyeyim ve çalıştırayım.

07:56.100 --> 07:58.990
Böylece çalıştırılabilir dosyanın adı tükenir.

08:01.710 --> 08:09.240
Ve eğer bu programı çalıştırırsam, o zaman bunun gibi bir çıktı verecektir, bu sizin için çok anlamlı olmayabilir,

08:09.240 --> 08:16.170
bu yüzden bu programın çıktısını geçici bir dosyaya yazmamız ve programınızın beş saniye kadar çalışmasına

08:16.830 --> 08:21.510
izin vermemiz gerekecek, sonra sadece kontrole basın ve görün.

08:22.530 --> 08:27.210
Ve şimdi bu -- dosyasına yazılan çıktıyı değerlendireceğiz veya inceleyeceğiz.

08:29.760 --> 08:36.180
Bu yüzden kritik bölümde çalışan okuyucu iş parçacıklarının sayısının sıfır olduğu satırları seçmeme

08:36.480 --> 08:37.350
izin verin.

08:41.010 --> 08:45.840
Kritik bölümde yürütülen bir dizi sert eğilim de bunlardan biridir.

08:46.590 --> 08:50.820
Ve saymama izin verin, WC tire al kullanarak bu tür kaç satır var.

08:53.150 --> 08:55.310
Yani bu kadar çok sayıda satır yapılır.

08:55.340 --> 09:03.560
Bu, kritik bölümde 10 kez doğru alternatifin tek başına çalıştığı ve kritik bölümde çalışan bir alternatif

09:03.560 --> 09:06.410
olduğu anlamına gelir.

09:07.310 --> 09:09.590
Yani bu oldukça geçerli bir senaryo.

09:10.490 --> 09:16.100
Şimdi şunu söyleyeyim, eğer kritik bölümde yürütülen doğru başlangıçların sayısı gerekiyorsa, bu tür satırların

09:16.100 --> 09:17.640
sayısı sıfır olmalıdır.

09:18.340 --> 09:23.660
Pekala, çünkü sağa doğru yetkililerin kritik bölüme girmesine izin verilmez ve üç sağ

09:23.660 --> 09:27.140
yetkilinin de kritik bölüme girmesine izin verilmez.

09:29.090 --> 09:33.980
Dolayısıyla, Azeroth yazarlarının sayısı ve kritik bölümde yürütülen bölgesel tehditlerin

09:33.980 --> 09:37.340
sayısı bir olabileceği gibi iki de olabilir.

09:38.190 --> 09:39.950
Üç olabilir.

09:41.510 --> 09:41.930
Tamam.

09:42.230 --> 09:47.480
Ancak kritik bölümde çalışan herhangi bir okuyucu tuzağı varsa, kritik bölümlerde yazar denemelerinden

09:48.020 --> 09:52.950
daha fazla sayıda yazar çalıştırılamaz, bu nedenle çıktı sıfır olmalıdır.

09:53.960 --> 10:00.590
Böylece benim yaptığım gibi çeşitli sayıda okuyucu ve yazar kombinasyonlarını deneyebilir ve herhangi

10:00.590 --> 10:07.580
bir zamanda kritik bölümde çalışan okuyucu ve yazar iş parçacıklarının okuma yazma günlükleri kurallarına

10:07.580 --> 10:11.120
uyması gerektiğini doğrulayabilirsiniz.
