WEBVTT

00:06.110 --> 00:12.380
Şimdi ağırlık ve sinyal konusundaki tartışmamızı bir analoji tartışması ile tamamlayalım.

00:12.740 --> 00:19.430
Dolayısıyla bu benzetme, daha gelişmiş ağırlık ve sinyal kullanımlarını içeren çözümleri kodlarken koşul değişkeni

00:19.460 --> 00:23.930
ve muteksin birlikte nasıl kullanılacağını anlamanıza yardımcı olacaktır.

00:24.080 --> 00:28.920
Dolayısıyla, gerçek dünya senaryolarından birini tanımlayan problem cümlesi şudur.

00:28.970 --> 00:33.680
Yani sorun ifadesi hem sizi hem de arkadaşınızı kapsıyor, değil mi?

00:33.680 --> 00:36.520
Ve diyelim ki ikiniz de bir oyun oynuyorsunuz.

00:36.530 --> 00:43.000
Diyelim ki bu problemde bir kutumuz var ve bu kutuda bazı şekerler var, değil mi?

00:43.010 --> 00:48.800
Kutu başlangıçta kilitlidir ve o kutunun tam olarak bir anahtarı vardır, değil mi?

00:48.800 --> 00:50.270
Çift anahtar yoktur.

00:50.270 --> 00:57.980
Kutunun kilidinin açılabileceği ve kutunun içindeki içeriğe erişilebileceği tam olarak bir anahtar vardır.

00:58.520 --> 01:00.440
Peki sizin buradaki rolünüz nedir?

01:00.440 --> 01:06.600
Anahtarı kullanarak kutunun kilidini açmanız ve bir şeker çıkarmanız gerekiyor.

01:06.630 --> 01:07.470
Doğru.

01:07.740 --> 01:14.010
Arkadaşınızın rolü ise, arkadaşınızın da aynı anahtarı kullanarak kutunun kilidini

01:14.040 --> 01:17.520
açması ve kutunun içine bir şeker koymasıdır.

01:17.520 --> 01:18.280
Doğru.

01:18.300 --> 01:24.300
Böylece sizin tüketici iş parçacığı rolünü oynadığınızı, arkadaşınızın ise üretici iş parçacığı rolünü

01:24.300 --> 01:27.960
oynadığını ve bir kısıtlama olduğunu görebilirsiniz.

01:27.960 --> 01:34.230
Ve bu kısıtlama oldukça açıktır ki sadece anahtarı olan kişi kutuyu kilitleyebilir ve kilidini açabilir.

01:34.230 --> 01:35.010
Değil mi?

01:35.190 --> 01:38.340
Kutunun anahtarını almadığın sürece, sen sadece.

01:38.490 --> 01:41.430
Sadece kutuyu kilitleyemez veya kilidini açamazsınız.

01:41.430 --> 01:42.090
Değil mi?

01:43.750 --> 01:46.030
Umarım sorun ifadesi açıktır.

01:46.030 --> 01:52.090
Bu tipik bir üretici tüketici problemidir ve önceki ders videolarında tartıştığımız S bir

01:52.090 --> 01:55.770
ile S dokuz arasındaki aynı adımları tartışacağız.

01:55.780 --> 02:01.360
Ve bu analojide bu adımların her birinin gerçek dünyayla ilgisini anlamaya çalışacağız.

02:01.630 --> 02:02.380
Doğru.

02:02.650 --> 02:08.700
Yani bu, Y'nin tüketici ve F'nin üretici olduğu tipik bir üretici tüketici senaryosudur.

02:08.710 --> 02:12.820
Yani ileriye dönük olarak, ekran iki bölüme ayrılmıştır.

02:12.820 --> 02:17.740
Sol tarafa Y adımlarını yazacağız ve sağ tarafa da bir arkadaşımızın

02:17.740 --> 02:20.320
attığı adımları yazacağız.

02:22.690 --> 02:30.520
Başlangıç olarak, başlangıçta kutuya erişimi olanın Y yani siz olduğunu varsayalım.

02:30.520 --> 02:32.950
Yani, anahtarı olan sizsiniz.

02:32.980 --> 02:39.070
Yani bir anahtara sahip olmak, bir kutunun muteksine kilitlendiğiniz anlamına gelir, değil mi?

02:39.280 --> 02:44.020
Yani S1 numaralı adım, kutunun anahtarına sahip olmanıza benzer.

02:44.020 --> 02:48.010
Ve kutunun anahtarı sizde olduğuna göre, kutunun kilidini pekâlâ açabilirsiniz.

02:48.010 --> 02:48.820
Değil mi?

02:48.910 --> 02:51.940
Ardından S2 numaralı adım, yüklemi kontrol edin der.

02:51.940 --> 02:57.250
Şimdi kutunun kilidini açtığınıza göre, kutunun içindekileri çok iyi görebilir ve kutu

02:57.250 --> 03:04.240
zaten boşsa, elbette yapacak bir şeyiniz olmadığını ve kendinizi engelleyeceğinizi kontrol edebilirsiniz, değil

03:04.240 --> 03:05.050
mi?

03:05.290 --> 03:11.410
Şimdi, burada üçüncü adımda, yalnızca koşul değişkenini kullanarak kendinizi engellemekle kalmıyor, aynı

03:11.410 --> 03:14.620
zamanda kutunun anahtarını da serbest bırakıyorsunuz.

03:14.800 --> 03:17.830
Bu p iplik koşulunu zaten yeterince tartışmıştık.

03:17.830 --> 03:18.430
Bekle.

03:18.970 --> 03:20.440
API iki şey yapar.

03:20.440 --> 03:26.210
İş parçacığını bloke eder ve ikinci argüman olarak aktarılan muteksin kilidini açar.

03:26.210 --> 03:26.930
Doğru.

03:26.930 --> 03:28.400
Şimdi bunu anlıyorsunuz.

03:28.430 --> 03:29.450
Neden p iplik durumu?

03:29.450 --> 03:31.760
Bekle, muteks üzerindeki kilidi serbest bırak.

03:32.750 --> 03:39.020
Dördüncü adım, yapacak bir şeyiniz olmadığı için sadece kendinizi bloke etmekle kalmayıp, aynı zamanda f

03:39.020 --> 03:45.740
olan başka bir adamın kutuya erişmesine ve içine bir şeker yerleştirmesine izin vermeniz gerektiğini söylüyor.

03:45.770 --> 03:50.090
Böylece F sadece ilk etapta içine bir şeker yerleştirebilecektir.

03:50.090 --> 03:53.870
Kutunun anahtarını bıraktınız, değil mi?

03:54.170 --> 03:57.680
Buradan itibaren kontrol beş numaralı adıma geçer.

03:57.710 --> 03:59.530
Bu altıncı adım.

03:59.540 --> 04:03.430
Şimdi, üçüncü adımdan beri muteks kullanılabilir durumda.

04:03.440 --> 04:07.160
Böylece arkadaşınız kutunun anahtarını ele geçirebilir.

04:07.160 --> 04:07.970
Doğru.

04:07.970 --> 04:11.450
Ve anahtarı olduğu için kutunun kilidini açabilir.

04:11.450 --> 04:16.490
Yedinci adımda ise kutunun içine bir şeker yerleştirebilir.

04:16.490 --> 04:17.300
Doğru.

04:17.780 --> 04:24.680
Artık arkadaşınız kutunun içine başarıyla bir şeker yerleştirdiğine göre, size şunu bildirebilir: hey, kutunun

04:24.680 --> 04:26.750
içine bir şeker yerleştirdim.

04:26.750 --> 04:31.250
Ve bunun için arkadaşınız size bir bildirim veya sinyal gönderir.

04:31.280 --> 04:32.120
Doğru.

04:32.270 --> 04:36.410
Yani sekiz numaralı adım tamamen uygulandıktan sonra.

04:36.410 --> 04:38.120
Size bir sinyal gönderilir.

04:38.630 --> 04:47.750
Yani bu adımda, F'nin kutuyla işinin bittiğine dair bildirim aldınız, ancak ara bir durumdasınız.

04:47.780 --> 04:55.100
Yani, kutunun içeriğine erişmek istiyorsunuz, ancak bunu yapamıyorsunuz çünkü F henüz kutunun anahtarını

04:55.100 --> 04:56.480
serbest bırakmadı.

04:56.480 --> 04:57.280
Değil mi?

04:57.290 --> 05:04.580
Yani arkadaşınızın kutunun anahtarını serbest bıraktığı dokuz numaralı adımdır ve bu nedenle

05:04.580 --> 05:09.740
ancak dokuz numaralı adımdan sonra anahtarlara erişiminiz olur.

05:09.950 --> 05:15.770
Yani on numaralı adım, bu muteks üzerinde tekrar bir kilit elde etmeye benzer.

05:15.770 --> 05:16.650
Doğru.

05:16.700 --> 05:22.430
Yani on numaralı adımda, bu muteks otomatik olarak perde arkasında kilitlenir, değil mi?

05:23.820 --> 05:27.840
İş parçacığı blokajı kaldırdığında ve koşulun ötesinde yürütmeye devam ettiğinde.

05:27.840 --> 05:28.950
Bekle API.

05:29.130 --> 05:33.980
Bu muteks üzerindeki kilit otomatik olarak çalıştıran iş parçacığına verilir.

05:33.990 --> 05:34.830
Doğru.

05:35.130 --> 05:39.570
Yani yine on numaralı adımda, kutuya erişiminiz var.

05:39.570 --> 05:43.170
Kutunun durumunu tekrar kontrol edeceksiniz, değil mi?

05:43.770 --> 05:48.150
İş parçacığı uyandığında yüklemi tekrar kontrol etmesi gerektiğini zaten tartışmıştık.

05:48.270 --> 05:52.440
Ve bu sefer kutuyu bulursanız, içine biraz şeker koyun.

05:52.470 --> 05:55.710
Sonra şekeri kutudan çıkarır ve tüketirsiniz.

05:55.740 --> 06:00.480
Bu S4 adım numarasıdır ve bu muteksin kilitli olduğunu unutmayın.

06:00.510 --> 06:04.410
Bu nedenle, bu adımlar kritik bölüm olarak yürütülmektedir.

06:04.680 --> 06:05.460
Değil mi?

06:06.530 --> 06:13.230
Adım S4'te şekeri kutudan çıkardıktan sonra anahtarı tekrar kutuya bırakabilirsiniz.

06:13.250 --> 06:13.970
Doğru.

06:13.970 --> 06:16.310
Bu, S5 numaralı adımdadır.

06:17.540 --> 06:21.410
Şimdi bu analojide y p iplik koşulunu anlıyorsunuz.

06:21.410 --> 06:22.550
Bekle api.

06:24.000 --> 06:31.290
Hem tehdidi engelleyecek hem de muteksin kilidini açacak şekilde uygulanır.

06:31.290 --> 06:37.080
Kutuda bir şey bulamadığınızda, yapacak bir şeyiniz olmadığı için kendinizi bloke edersiniz

06:37.080 --> 06:43.830
ve ayrıca arkadaşınıza kutuya erişim izni vermek istersiniz ve bu nedenle kutunun anahtarını serbest bırakmanız

06:43.830 --> 06:45.120
gerekir.

06:45.120 --> 06:45.960
Değil mi?

06:46.920 --> 06:53.790
Dolayısıyla bu örnek, bu analoji bağlamında S1'den S9'a kadar tüm adımları açıkça açıklamaktadır.

06:54.060 --> 06:59.580
Daha gelişmiş iş parçacığı senkronizasyon tekniklerini uygulayacağımız zaman, S1'den S9'a kadar olan

06:59.580 --> 07:06.990
aşağıdaki adımları aklınızda tutmalısınız çünkü bu, iş parçacığı senkronizasyonuna dayalı problemleri kodlamanın oldukça standart

07:06.990 --> 07:08.010
bir yoludur.

07:08.010 --> 07:13.890
Aşağı yukarı mantıksal olarak, aynı adımları aynı sırayla uygulamanız gerekir, ancak problem

07:13.890 --> 07:19.500
ifadesine bağlı olarak, programın yapısı farklı görünebilir, ancak programı analiz ederseniz,

07:19.500 --> 07:23.790
S1'den S9'a kadar aynı adımları uygulayacaksınız.

07:23.790 --> 07:24.600
Doğru.

07:24.870 --> 07:30.180
Yemek filozofu problemini uygularken S1'den S9'a kadar aynı adımları

07:30.180 --> 07:32.830
uygulayacağımızı göreceğiz.

07:32.850 --> 07:38.610
Şimdi, yemek filozofu problemi kolayca üretici tüketici problemine ayrılabilir ve yemek filozofu

07:38.610 --> 07:42.930
problemi uygulamasını tartışırken bu konuda daha fazla tartışacağız.
