WEBVTT

00:05.450 --> 00:10.340
Evet arkadaşlar, şimdi sıkı değişim kavramını tartışacağız.

00:10.490 --> 00:15.170
Yani katı değişim hiçbir şey değildir, ancak iş parçacıklarının yürütülme modelidir.

00:15.170 --> 00:19.820
Ve semaforları kullanarak sıkı değişimin uygulanmasını tartışacağız.

00:20.720 --> 00:27.500
Bu nedenle, bir çift iş parçacığının sıkı bir dönüşümlü şekilde yürütülmesi pratik bir öneme sahiptir.

00:27.530 --> 00:28.220
Doğru.

00:28.220 --> 00:30.350
Bu yüzden iplik çifti kelimesine dikkat edin.

00:30.350 --> 00:33.110
Bu sorun yalnızca iki iş parçacığı için geçerlidir.

00:33.110 --> 00:33.830
Değil mi?

00:35.440 --> 00:41.670
Yazılım dünyasında iki iş parçacığı arasında bu yürütme modelini uygulamak nadir değildir

00:41.680 --> 00:47.530
ve iş parçacığı senkronizasyonu tartışmasında katı Dönüşümün özel bir yer bulmasının

00:47.530 --> 00:48.610
nedeni budur.

00:48.790 --> 00:55.750
Yani resimde T1 iş parçacığına sahip olduğumuzu ve t1 iş parçacığı yürütüldüğünde ve W1 diyelim iş yaptığında bir t2 iş

00:55.750 --> 00:58.300
parçacığımız olduğunu görebilirsiniz.

00:58.330 --> 01:07.480
T2 iş parçacığı engellenmiş durumdadır ve T1 iş parçacığı W1 işini bitirdiğinde engellenir ve yürütmeye

01:07.570 --> 01:14.350
devam eden ve W2 miktarda işi doğru yapan t2 iş parçacığıdır.

01:14.740 --> 01:21.910
Daha sonra t2 iş parçacığı bu noktada kendini bloke eder ve t1 iş parçacığı yürütmeye devam eder ve W3

01:21.940 --> 01:26.190
miktarında iş yapar ve bu döngü sonsuza kadar tekrar eder.

01:26.200 --> 01:26.920
Değil mi?

01:27.340 --> 01:33.910
Bu diyagramdan da görebileceğiniz gibi, belirli bir zamanda yalnızca bir iş parçacığı yürütülüyor, değil mi?

01:33.910 --> 01:40.700
Buradaki diğer bir zorluk ise, bir iş parçacığı yürütmeyi bitirdiğinde, yürütmeye devam etmesi için diğer

01:40.700 --> 01:43.220
iş parçacığına nasıl iletileceğidir.

01:43.220 --> 01:43.940
Doğru.

01:43.940 --> 01:49.790
Ve diğer iş parçacığı işini bitirdiğinde, o zaman diğer iş parçacığı resmi iş parçacığına işimi bitirdim,

01:49.820 --> 01:53.330
yürütmenize devam edebilirsiniz mesajını nasıl iletecektir.

01:53.330 --> 01:54.040
Değil mi?

01:54.050 --> 02:01.220
Bu nedenle, iş parçacıklarının katı dönüşümlü bir şekilde yürütülebileceği semaforları kullanarak şemayı uygulamamız

02:01.220 --> 02:01.930
gerekir.

02:01.940 --> 02:02.690
Doğru.

02:02.900 --> 02:08.240
Bu yüzden semafor kavramını kullanacağız ve daha spesifik olarak bu problemin çözümünü uygulamak

02:08.270 --> 02:11.870
için sıfır semafor kullanacağımızı söyleyeceğiz.

02:11.870 --> 02:17.600
Şimdi soru sıfır semaforların ne olduğudur, sıfır, semaforlar hiçbir şey değildir,

02:17.600 --> 02:22.370
ancak izin sayacı değeri sıfır olarak başlatılan semaforlardır.

02:22.970 --> 02:23.510
Doğru.

02:23.510 --> 02:25.580
Peki semaforla ilgili özel şey nedir?

02:25.760 --> 02:32.840
Özel olan şey, böyle bir semaforun başlatılmasından hemen sonra, bir iş parçacığı böyle bir semafor üzerinde

02:32.840 --> 02:39.410
bazı ağırlık API'lerini çağırırsa, çağıran iş parçacığının hemen engellenmesidir.

02:39.410 --> 02:40.130
Değil mi?

02:40.130 --> 02:44.240
Çünkü izin sayacının değeri 0'dan -1'e gidecektir.

02:44.240 --> 02:48.680
Semaforun kurallarına göre, çağıran iş parçacığı engellenir.

02:48.770 --> 02:49.490
Doğru.

02:50.450 --> 02:57.440
Öte yandan, iş parçacığı sıfır semafor üzerinde bir post işlemi gerçekleştirdiğinde,

02:57.440 --> 03:01.220
izin sayacı değeri -1'den 0'a yükselecektir.

03:01.220 --> 03:07.100
Ve bu semafor üzerinde bloke olan iş parçacığı yürütmeye devam edecektir.

03:07.100 --> 03:07.850
Doğru.

03:08.210 --> 03:14.720
Böylece sıfır semaforun bize iş parçacığını engellemenin ve iş parçacığına sinyal göndermenin en basit yolunu sunduğunu görebilirsiniz.

03:14.720 --> 03:15.440
Doğru.

03:16.220 --> 03:23.420
t1 iş parçacığı yürütülüyorsa ve yürütme akışının bir noktasında ise.

03:23.420 --> 03:29.690
T1 iş parçacığının sıfır semafor üzerinde bir API çağırdığını varsayalım.

03:29.720 --> 03:33.230
O zaman T1 iş parçacığı bu noktada engellenecektir.

03:34.200 --> 03:34.920
Doğru.

03:34.920 --> 03:40.080
Ve sistemdeki başka bir iş parçacığı basitçe bazı posta API'lerini çağırırsa.

03:40.940 --> 03:42.620
Aynı semaforda.

03:42.650 --> 03:45.530
Ardından T1 iş parçacığı yürütmeye devam eder.

03:45.830 --> 03:46.700
Doğru.

03:46.730 --> 03:49.700
Yani sıfır semaforlar bu şekilde çalışır.

03:51.280 --> 03:55.910
Şimdi de katı değişime dayalı bir problemi çözelim.

03:55.930 --> 03:58.750
Diyelim ki elinizde şu problem cümlesi var.

03:58.960 --> 04:07.360
T1 ve t2 olmak üzere iki iş parçacığı oluşturan bir program yazın, t1 iş parçacığı 1 ile 15 arasındaki tek sayıları yazdırırken,

04:07.360 --> 04:14.260
t2 iş parçacığı 2 ile 15 arasındaki çift sayıları yazdırır ve ekranda görmeniz gereken çıktı sıralı

04:14.260 --> 04:16.080
olmalıdır.

04:16.090 --> 04:21.430
Yani, çıktı bir, iki, üç, dörtten 15'e kadar olmalıdır.

04:21.430 --> 04:22.030
Doğru.

04:22.210 --> 04:25.240
Bu yüzden çıktınız kesinlikle sıralı olmalıdır.

04:25.990 --> 04:32.410
Dolayısıyla bu sorunun çözümü, T1 ve T2 iş parçacığını katı bir alternatif şekilde yürütecek

04:32.410 --> 04:35.590
şekilde senkronize etmeniz gerektiğidir.

04:35.620 --> 04:36.370
Değil mi?

04:38.120 --> 04:44.690
Bu yüzden videoyu duraklatmanızı ve kendi başınıza bir çözüm denemeye çalışmanızı rica ediyorum, çünkü şimdi

04:44.690 --> 04:47.030
bu sorunun çözümünü tartışacağım.

04:47.030 --> 04:51.290
Bu nedenle lütfen videoyu durdurun ve ilerlemeden önce çözüm hakkında düşünün.

04:53.830 --> 04:58.780
Şimdi bu sorunun çözümünü tartışacağım, böylece çözümün oldukça basit ve anlaşılır

04:58.780 --> 05:01.000
olduğunu görebilirsiniz.

05:01.000 --> 05:07.060
İki semafor kullanmanız gerekir ve her iki semafor da sıfır semafordur.

05:07.180 --> 05:07.870
Değil mi?

05:07.870 --> 05:12.610
Dolayısıyla bu çözüm iki sıfır semafor almanızı gerektirir.

05:12.610 --> 05:20.890
Şimdi t bir ve t iki iş parçacığının bu uygulamasını gözden geçirmeyi ve bu programın 15'e kadar bir, iki, üç, dört,

05:20.890 --> 05:26.770
beş çıktılarını yazdırıp yazdırmayacağını doğrulamayı size bırakıyorum.

05:26.770 --> 05:34.270
Ve eğer bu kod parçasının gerçekten doğru çözümü verdiğini düşünüyorsanız, o zaman bu çözümü veya bu kod

05:34.270 --> 05:38.230
parçasını bir kez daha düşünmenizi tavsiye ederim.

05:38.230 --> 05:43.210
Bir de sıfır semaforun bu sorunu neden bu kadar zarif bir şekilde çözebildiğini düşünün.

05:44.450 --> 05:50.540
Bunu sormamın nedeni, bu kursun SQL bölümünde katı dönüşümün bir alt kümesini uygulamak ve pratikte

05:50.540 --> 05:58.100
sıfır semaforların belirli iş parçacığı senkronizasyon sorunlarını çözmemize nasıl yardımcı olduğunu görmek için sıfır

05:58.100 --> 06:00.650
kuvvet kullanacak olmamızdır.
