WEBVTT

00:06.420 --> 00:13.140
Şimdi iş parçacığı bariyerinin işlevselliğini göstermek için yapacağım şey main dot C dosyasını

00:13.170 --> 00:21.240
yazmak olacak ve bu dosyada size iş parçacığı bariyerinin nasıl kullanılacağını göstereceğim.

00:21.240 --> 00:26.220
Dolayısıyla bu main dot c dosyası iş parçacığı bariyerini kullanan uygulamayı temsil eder.

00:27.360 --> 00:36.570
Yapacağım ilk şey bir iş parçacığı bariyeri nesnesi almak ve bazı iş parçacıklarına ihtiyacım var, böylece bu iş parçacıklarını

00:36.570 --> 00:40.230
iş parçacığı bariyerinde engelleyebilirim.

00:41.100 --> 00:46.050
Bunun için üç iplik tutamacını doğru alayım.

00:49.330 --> 00:51.940
Şimdi ana işlevime başlayayım.

00:54.580 --> 01:01.630
Ve bu ana işlevde, iş parçacığı bariyerimizi eşik sayısı değeri üçe eşit olacak şekilde başlatmama izin

01:01.630 --> 01:04.870
verin çünkü üç iş parçacığı aldım, değil mi?

01:06.080 --> 01:09.050
Şimdi bu konuların her birine başlamama izin verin.

01:11.050 --> 01:17.010
Bir başlık başlatmak için, başlığımı tanımlayan bir başlık tanımlayıcısı alayım.

01:17.020 --> 01:20.540
Bu yüzden her bir başlığıma bir isim verecektim.

01:20.560 --> 01:28.210
Bu durumda, diyelim ki bir iplik alıyorum ve sonra ipliğimi başlatacağım.

01:28.240 --> 01:31.650
Bir numara sıfır numara, değil mi?

01:31.660 --> 01:37.660
Bu, uygulayacağımız iş parçacığı işlevi geri çağrısıdır ve iş parçacığı tanımlayıcısını bu işleve

01:37.660 --> 01:43.660
bir argüman olarak iletir, böylece iş parçacığı bariyerimizin beklendiği gibi çalışıp çalışmadığını

01:43.660 --> 01:48.160
belirlememize yardımcı olacak iş parçacığı adını yazdırabiliriz.

01:49.360 --> 01:53.420
Aynı şekilde, kalan iki başlığı da aynı şekilde başlatacağım.

01:53.440 --> 01:59.950
İş parçacıklarının adı iş parçacığı iki ve iş parçacığı üçtür ve bu iş parçacıklarının tümü aslında iş parçacığını yürütmektedir.

01:59.980 --> 02:02.230
Aynı iş parçacığı işlevi geri çağrısı.

02:02.230 --> 02:02.950
Doğru.

02:05.090 --> 02:10.670
Bu iş parçacığı işlevi geri aramasında, size iş parçacığı bariyerinin gösterimini göstereceğiz.

02:10.880 --> 02:13.840
Ve son olarak, ana fonksiyonumuz almamalıdır.

02:13.850 --> 02:17.960
Ve bu yüzden p thread join API'sini çağırmama izin verin.

02:18.350 --> 02:19.190
Değil mi?

02:19.430 --> 02:24.410
Tabii tüm başlıklar geri gelip ana başlığa katılmazsa.

02:24.440 --> 02:27.020
Başvurumuz sonlandırılmayacaktır.

02:27.020 --> 02:32.510
Ve uygulamamız sonlanmadan hemen önce, iş parçacığı bariyerinin durumunu yazdıralım,

02:32.510 --> 02:40.520
böylece uygulama sonlanmadan önce iş parçacığı bariyerimizin doğru durumda bırakıldığını doğrulayabiliriz.

02:40.820 --> 02:46.640
Doğru durum, bu iş parçacığı bariyerinde bekleyen mevcut iş parçacığı sayısının şu anda sıfır

02:46.850 --> 02:48.590
olması gerektiğidir.

02:48.590 --> 02:51.770
Bu iş parçacığı işlevi geri çağrısının uygulamasını görelim.

02:53.010 --> 02:58.560
Dolayısıyla, bu iş parçacığı işlevi geri arama işlevinin uygulanmasıyla başlamak için yapacağım

02:58.560 --> 02:59.670
şey şudur.

03:00.370 --> 03:03.040
Ben olsam sadece iplik bariyerini yerleştirirdim.

03:03.040 --> 03:03.340
Bekle.

03:03.340 --> 03:05.650
Bu fonksiyonun başında çağırın.

03:06.010 --> 03:12.070
Bu, başlangıçta tüm bu üç iş parçacığının bu iş parçacığı bariyerinde bloke olacağı anlamına gelir.

03:12.220 --> 03:13.000
Değil mi?

03:13.510 --> 03:18.500
Ve üç iplik de bu bariyer noktasına ulaşana kadar bloke olurlar.

03:18.520 --> 03:21.160
Yani on numaralı hat bariyer noktası.

03:22.500 --> 03:29.650
Ve bundan sonra sadece ilk barikatın tüm iplikler tarafından temizlendiğini yazdıracağım.

03:29.730 --> 03:30.450
Doğru.

03:30.450 --> 03:33.390
Bu yüzden 12 numaralı satır üç kez yazdırılmalıdır.

03:33.600 --> 03:40.800
Yani her üç iş parçacığı da 12 numaralı satırı yazdırmalıdır çünkü iş parçacığı bariyeri atıldığında

03:40.800 --> 03:46.860
her üç iş parçacığı da bu bariyer noktasının ötesinde yürütmeye devam edecektir.

03:47.310 --> 03:54.750
Ardından 14 numaralı satıra ikinci bariyer noktasını yerleştirir ve aynı şeyi yaparım.

03:54.750 --> 03:57.420
Printf deyimini yerleştirecektim.

03:57.660 --> 04:01.800
Dolayısıyla, üç iş parçacığı da 16 numaralı satırı yazdırmalıdır.

04:02.370 --> 04:03.150
Değil mi?

04:03.750 --> 04:09.150
Çünkü her üç iş parçacığı da 14 numaralı satır olan bariyer noktasının ötesinde yürütmeye

04:09.150 --> 04:10.560
devam edecekti.

04:11.580 --> 04:16.410
Ve benzer şekilde, üçüncü bariyer noktasını 18 numaralı satıra yerleştirirdim.

04:16.410 --> 04:22.200
Ve benzer şekilde, printf deyimini 20 numaralı satıra yerleştirirdim.

04:22.350 --> 04:29.160
Bu iş parçacığı işlevi geri çağrısına bakarak, programı gerçekten çalıştırmadan önce beklenen çıktının ne olması gerektiğini

04:29.160 --> 04:30.690
düşünebilir misiniz?

04:31.110 --> 04:36.750
Bu yazdırma ifadelerinin konsolda hangi sırayla görünmesi gerektiğini düşünüyorsunuz?

04:37.290 --> 04:44.550
Ben çözümümü uyguluyorum ve bu çıktıyı nasıl yorumladığınızı sizin analizinize bırakıyorum.

04:44.580 --> 04:48.630
Bu çıktı doğrudur ve bunu açıklayabilmeniz gerekir.

04:48.630 --> 04:50.430
Neden böyle bir çıktı görüyorsunuz?

04:50.610 --> 04:56.730
Bu çıktı bir iş parçacığı bariyerinin işlevselliğini doğrular ve bu çıktı aynı zamanda iş parçacığı bariyeri uygulamamızın

04:56.730 --> 04:58.950
doğru olduğunu da doğrular.

04:59.250 --> 05:05.950
Bu ipliklerin görünme sırası, yani birinci iplik, ikinci iplik, üçüncü iplik önemli değildir.

05:06.070 --> 05:07.990
Herhangi bir sıra olabilir.

05:08.020 --> 05:09.460
Ne önemi var ki?

05:09.460 --> 05:13.030
Üç ipliğin de önce ilk barikatı geçmesi gerekir.

05:13.060 --> 05:19.000
Daha sonra üç iplik de ikinci barikatı geçmeli ve ardından üç iplik de üçüncü barikatı

05:19.000 --> 05:20.040
geçmelidir.

05:20.050 --> 05:20.770
Doğru.

05:21.540 --> 05:28.560
Ancak, ipliğin barikattan çıkış sırası rastgele olabilir ve bunun bir önemi yoktur.

05:29.490 --> 05:32.670
İlk barikatın iplik tarafından geçildiğini görebilirsiniz.

05:32.670 --> 05:33.630
Bir, iki, üç.

05:33.660 --> 05:39.510
Daha sonra ikinci barikat iki, bir, üç ve üçüncü barikat iplerden geçirilir.

05:39.510 --> 05:40.440
Bir, iki, üç.

05:40.470 --> 05:41.220
Doğru.

05:41.310 --> 05:45.070
Böylece iş parçacığı bariyerimizin uygulaması tamamlanmış oldu.

05:45.090 --> 05:49.830
Bu ders videosunun ardından iplik bariyeriyle ilgili birkaç soru ve bitirmeniz gereken

05:49.830 --> 05:51.030
ödevler var.
