WEBVTT

00:06.270 --> 00:11.640
Evet arkadaşlar, şimdi iş parçacığı bariyerini tanımlayan veri yapısını tartışalım.

00:12.240 --> 00:17.880
Bu nedenle, veri yapısını tartışmadan önce, iş parçacığı bariyerinin dahili olarak nasıl çalıştığını anlamamız gerekir.

00:18.060 --> 00:21.120
Yani iplik bariyeri röle kavramı üzerinde çalışır.

00:21.210 --> 00:28.500
Yani röle, sadece sinyal verilen bir iş parçacığı anlamına gelir, yani engellenmiş durumdan yürütmeye yeni devam

00:28.500 --> 00:36.600
eden iş parçacığı, diğer blok iş parçacıklarına yürütmelerine devam etmeleri için sinyal verecek ve böylece bir sinyal zinciri

00:36.600 --> 00:38.130
oluşturacaktır.

00:38.490 --> 00:39.240
Doğru.

00:39.930 --> 00:47.040
Günlük hayatımızda, yolda bir barikata takıldığımızda, barikatı bu şekilde geçiyoruz.

00:47.040 --> 00:52.870
Otorite bize izin verdiğinde, barikatı bir bir aşıyoruz, öyle değil mi?

00:52.890 --> 00:55.830
İplik bariyeri de bu şekilde çalışır.

00:55.920 --> 01:00.650
Şimdi bir örnek yardımıyla iplik bariyerinin işleyişini tartışalım.

01:00.660 --> 01:06.340
Diyelim ki bir iş parçacığı bariyerimiz var ve iş parçacığı bariyerini uygulama kodumuzdaki

01:06.340 --> 01:09.180
100 numaralı satıra yerleştirdik.

01:09.190 --> 01:11.470
İşte bariyer noktası burası.

01:11.470 --> 01:16.690
Ve bu iş parçacığı bariyerinin eşik değeri üç ile başlatıldığını varsayalım.

01:17.930 --> 01:24.050
Şimdi birinci iş parçacığının geldiğini ve bariyer noktasına çarpıp bloke olduğunu varsayalım.

01:24.640 --> 01:29.770
Benzer şekilde, T2 tehdidi gelir, bariyer noktasına çarpar ve engellenir.

01:30.100 --> 01:39.190
Ve şimdi Tehdit T3 geliyor ve bariyer noktasına çarpıyor ve engellenmeden tehdit T3 bariyer noktasını

01:39.190 --> 01:40.510
aştı.

01:41.020 --> 01:47.650
Şimdi T3 tehdidi bariyer noktasını aştığında, T3 tehdidi bir sinyal üretir.

01:49.440 --> 01:50.160
Doğru.

01:52.400 --> 01:57.620
Bu sinyal, bariyer üzerinde engellenen iş parçacıklarından biri tarafından tüketilecektir.

01:57.920 --> 02:02.660
Bu iş parçacığı t1 iş parçacığı veya yazılacak t iş parçacığı olabilir.

02:03.970 --> 02:11.920
T2 tehdidi bariyer noktasının ötesinde yürütmeye devam ettiğinde, tehdidin bu sinyali tükettiğini ve dolayısıyla

02:11.920 --> 02:17.350
tehdidin bariyer noktasının ötesinde yürütmeye devam ettiğini varsayalım.

02:17.380 --> 02:23.920
Şimdi T2 tehdidi bir sinyal üretir ve bu sinyal bariyer noktasında engellenen başka bir iş parçacığı tarafından

02:23.920 --> 02:25.180
tüketilir.

02:25.750 --> 02:26.500
Doğru.

02:26.500 --> 02:33.580
Ve bu zincir, bariyer noktasında engellenen son iş parçacığı sinyali aldığı için yürütmeye devam

02:33.580 --> 02:39.280
ettiğinde devam eder, o zaman böyle bir tehdit herhangi bir sinyal üretmez.

02:39.580 --> 02:40.270
Değil mi?

02:40.270 --> 02:47.200
Yani bu örnekte T1 iş parçacığı herhangi bir sinyal üretmez çünkü bu sinyale ihtiyaç duyan bir

02:47.200 --> 02:49.540
tehdit yoktur, bu kadar basit.

02:49.810 --> 02:54.310
Yani tüm bu tasarımda, ipliği görür görmez bunu görebilirsiniz.

02:56.170 --> 02:59.200
Bariyer noktasının ötesinde yürütmeye devam eder.

02:59.200 --> 03:06.190
Sinyalin alınmasının bir sonucu olarak, iş parçacığının kendisi bir sinyal üretir, böylece bariyer noktasında

03:06.190 --> 03:12.490
engellenen sonraki iş parçacığı bu sinyali işleyerek yürütmeye devam edebilir.

03:12.490 --> 03:19.090
Ve tekrar yürütmeye devam eden iş parçacığı yine aynı şeyi yaparak bariyer noktasında engellenen başka bir iş

03:19.120 --> 03:22.630
parçacığının yürütmeye devam etmesine izin verecektir.

03:23.310 --> 03:23.940
Doğru.

03:23.940 --> 03:31.410
Yani bu, bir iş parçacığının bir sonraki iş parçacığının yürütmeye devam etmesine izin vermek için bir sinyal ürettiği

03:31.410 --> 03:33.030
bir tür zincirdir.

03:33.030 --> 03:34.920
Ve devam ediyor.

03:37.080 --> 03:40.020
Dolayısıyla bu kavrama röle kavramı denir.

03:41.010 --> 03:46.380
İş parçacığı bariyerlerini uygulayacağımız zaman benzer bir şema uygulayacağız.

03:47.400 --> 03:51.060
Tüm bu mantık bu başlıkta uygulanacak.

03:51.090 --> 03:52.500
Bariyer Barikat.

03:53.930 --> 03:58.790
Şimdi bir iş parçacığı bariyerini temsil edecek bir veri yapısını tartışalım.

03:59.510 --> 04:04.520
Böylece, bunun iş parçacığı bariyerimizi temsil edeceğimiz bir veri yapısı olduğunu görebilirsiniz.

04:04.550 --> 04:10.940
Bu veri yapısının her bir alanını ele alalım ve bu alanı iplik bariyerinin işleyişiyle ilişkilendirmeye

04:10.940 --> 04:12.170
çalışalım.

04:12.620 --> 04:17.240
İlk alan olan maksimum sayı, bir eşik değerinden başka bir şey değildir.

04:18.920 --> 04:23.270
Ya da kod yazarken bu alanı eşik sayısı olarak yeniden adlandıracağız.

04:25.510 --> 04:32.200
Daha sonra mevcut ağırlık sayısı, bariyerde bekleyen veya engellenen iş parçacıklarının mevcut sayısıdır.

04:33.400 --> 04:40.540
Böylece mevcut ağırlık sayısının değeri sıfırdan eşik eksi bire gidecektir.

04:41.630 --> 04:42.320
Doğru.

04:43.240 --> 04:48.220
Daha önce de belirttiğimiz gibi, iş parçacığı bariyerinde engellenebilecek maksimum iş parçacığı

04:48.220 --> 04:51.430
sayısı n eksi birdir ve burada n bariyerin eşik değeridir.

04:51.760 --> 04:58.720
Şimdi iş parçacığı bariyerinin ana işlevi iş parçacıklarını engellemektir ve bu nedenle iş parçacıklarının engelleneceği

04:58.720 --> 05:01.360
bir koşul değişkenine ihtiyacımız vardır.

05:01.390 --> 05:02.080
Doğru.

05:02.110 --> 05:09.310
Çalışan bir iş parçacığını engellemek için bir koşul değişkenine ve bir mutekse ihtiyacınız olduğunu zaten biliyoruz.

05:09.550 --> 05:16.060
Yani bu, bir iş parçacığı bariyeri üzerinde birbirini dışlayan işlemler gerçekleştirmek için kullanılacak muteks'tir.

05:16.090 --> 05:22.540
İş parçacığı bariyeri, uygulamanın birkaç iş parçacığı arasında paylaşılan bir veri yapısı olduğundan, iş parçacığı

05:22.750 --> 05:29.050
bariyeri üzerindeki herhangi bir işlemi karşılıklı olarak dışlama şeklinde gerçekleştirmemiz gerekir.

05:30.580 --> 05:32.890
Ve bunun için bir mutekse ihtiyacımız var.

05:33.710 --> 05:37.520
Şimdi bu iki alan bariyer eğilimi ile ilgilidir.

05:40.480 --> 05:46.030
Bu Boolean alanı, bariyer yerleştirme işleminin devam edip etmediğini takip eder.

05:46.060 --> 05:49.240
Yani varsayılan olarak yine hazır.

05:49.240 --> 05:53.050
Bayrak varsayılan olarak false olarak ayarlanmıştır.

05:53.930 --> 05:54.680
Doğru.

05:54.680 --> 06:03.710
Ancak iş parçacığı bariyeri elden çıkarma aşamasına girdiğinde, bu alan true olarak ayarlanır ve bu da iş parçacığı

06:03.740 --> 06:08.750
bariyeri elden çıkarma işleminin devam ettiği anlamına gelir.

06:08.900 --> 06:17.360
Ve tüm iş parçacığı atıldıktan sonra, bu alan false olarak ayarlanır, bu da iş parçacığı bariyerinin atılmasının

06:17.360 --> 06:24.290
tamamlandığını ve iş parçacığı bariyerinin artık tekrar kullanılabileceğini gösterir.

06:25.550 --> 06:29.090
Bu da ihtiyacımız olan ek koşul değişkenidir.

06:29.570 --> 06:38.150
İş parçacığı bariyeri kullanımdayken herhangi bir iş parçacığının iş parçacığı bariyerini kullanmasına izin vermemek için bu koşul

06:38.180 --> 06:40.430
değişkenine ihtiyacımız var.

06:40.430 --> 06:41.900
İlerleme aşaması.

06:42.140 --> 06:42.860
Doğru.

06:45.230 --> 06:48.590
Diyelim ki bu örnekte.

06:50.730 --> 06:51.190
Konu.

06:51.510 --> 06:54.120
Bir tanesi hala iplik bariyerinde bloke edilmiş durumda.

06:54.270 --> 07:02.220
Üçüncü iş parçacığı bariyer noktasını çoktan geçmiştir ve ikinci iş parçacığı da bariyer noktasını geçmiştir çünkü

07:02.220 --> 07:05.010
iş parçacığından bir sinyal almıştır.

07:05.280 --> 07:06.070
Üç.

07:06.090 --> 07:10.630
Ancak birinci iplik henüz infazına devam etmedi.

07:10.650 --> 07:16.560
Bu, bariyer noktasında hala engellenmiş olan bazı iş parçacıkları olduğu anlamına gelir ve bir iş parçacığı

07:16.560 --> 07:20.100
bariyerinin elden çıkarma aşamasında olduğunu söyleriz.

07:20.190 --> 07:26.400
Şimdi, iş parçacığı bariyeri yerleştirme aşamasında olduğu sürece, uygulamanın bir iş

07:26.400 --> 07:32.790
parçacığı gelir ve bariyer noktasına çarparsa, bu durumda iş parçacığını meşgul CV koşul

07:32.820 --> 07:35.790
değişkeninde üç dört engelleyeceğiz.

07:36.210 --> 07:44.070
Bu, iş parçacığı bariyeri bariyer elden çıkarma aşamasındaysa herhangi bir tehdidin iş parçacığı bariyerine erişmesine izin

07:44.070 --> 07:46.260
vermediğimiz anlamına gelir.

07:47.160 --> 07:53.440
Bu nedenle, bariyerlerin yerleştirilmesi devam ederken iş parçacığı bariyerini kullanmaya çalışan

07:53.440 --> 07:59.230
herhangi bir ek iş parçacığını engelleyeceğimiz ek bir koşul değişkenine ihtiyacımız var.

08:02.230 --> 08:03.280
İşte böyle.

08:03.280 --> 08:08.830
İşini yapmakla meşgul olan bir veri yapımız var ve veri yapısı kullanılabilir hale gelene

08:08.830 --> 08:12.340
kadar bu veri yapısını tekrar kullanmak istemiyoruz.

08:12.370 --> 08:12.910
Doğru.

08:14.750 --> 08:20.130
Bu yüzden iş parçacığı bariyerimizi başlatan bir API iş parçacığı bariyeri yazacaktık.

08:20.150 --> 08:28.160
İş parçacığı bariyerinin adresini ve bir tamsayı değeri olan bir eşik değerini geçeceğiz.

08:28.160 --> 08:32.420
Ve bu değer iş parçacığı bariyerini eşik sayısı ile başlatır.

08:32.570 --> 08:36.890
Bu yüzden bir sonraki ders videosundan itibaren iş parçacığı bariyerlerinin uygulanmasına başlayacağız.
