WEBVTT

00:04.990 --> 00:09.820
Evet arkadaşlar, şimdi size joinable kavramını ve iş parçacıklarını gösteren demo programını

00:09.820 --> 00:10.630
göstereyim.

00:10.780 --> 00:16.720
Bu yüzden Multithreading Bible slash thread basics slash joinable dizinindeyim.

00:16.720 --> 00:22.060
Ve bu dizinin içinde Joinable Example dot c Right dosyasını bulacaksınız.

00:22.240 --> 00:25.180
İşte bu dosyayı tartışacağız.

00:25.300 --> 00:31.630
Bu programda göstereceğim şey, ana iş parçacığımızın iki iş parçacığı başlatacağıdır,

00:31.660 --> 00:32.410
değil mi?

00:34.720 --> 00:38.290
Bu iki iplik ikinci ve üçüncü iplik olsun.

00:38.320 --> 00:39.000
Doğru.

00:39.010 --> 00:45.040
Yani bunlar, ana iş parçacığının çatallanacağı iki alt iş parçacığı için iki iş parçacığı tanıtıcısıdır.

00:45.640 --> 00:53.890
Şimdi bu programın işlevselliği, ana iş parçacığımız alt iş parçacıkları oluşturduğunda, alt iş parçacıklarının oluşturulması

00:53.890 --> 01:01.630
sırasında, ana iş parçacığımızın bu alt iş parçacıklarına argüman olarak bir tamsayı değeri sağlayacağıdır.

01:01.930 --> 01:09.640
Bu alt iş parçacıkları sadece bu tamsayı değerinin karesini hesaplar ve sonucu ana iş parçacığına döndürür.

01:09.640 --> 01:10.360
Doğru.

01:10.750 --> 01:16.570
Başka bir deyişle, bu iki alt iş parçacığı hiçbir şey yapmaz, ancak yalnızca kendilerine iletilen bir tamsayı girdisinin

01:16.570 --> 01:18.070
karesini hesaplarlar.

01:18.070 --> 01:18.850
Doğru.

01:20.240 --> 01:26.570
Başlangıç olarak, ana iş parçacığımızda yapacağımız ilk şey thread handle kullanarak alt iş parçacıklarından

01:26.570 --> 01:28.490
birini oluşturmaktır.

01:28.490 --> 01:29.150
Değil mi?

01:29.150 --> 01:35.510
Ve ikinci argümanı, bu iş parçacığının karesini hesaplaması gereken değer olarak geçiyoruz.

01:35.510 --> 01:36.200
Doğru.

01:36.230 --> 01:39.680
Bu işlev dizisinin uygulanmasını kısaca tartışacağız.

01:39.680 --> 01:40.790
Alt çizgi oluştur.

01:40.820 --> 01:44.450
Bu kullanıcı tanımlı bir işlevdir ve standart bir Posix işlevi değildir.

01:44.840 --> 01:51.500
Benzer şekilde, ana iş parçacığı p iş parçacığı üç olan başka bir tanıtıcıyı kullanarak başka bir iş parçacığı oluşturacak ve bu iş

01:51.530 --> 01:55.670
parçacığına argüman olarak on tamsayı değerini iletmemize izin verecektir.

01:55.670 --> 01:56.420
Doğru.

01:57.140 --> 02:01.520
Şimdi thread underscore create fonksiyonunun uygulamasını tartışalım.

02:01.610 --> 02:06.470
Gördüğünüz gibi thread underscore create fonksiyonu iki argüman kabul eder.

02:06.980 --> 02:12.620
İlk argüman iş parçacığı tanıtıcısına bir işaretçidir ve ikinci argüman ilettiğimiz tamsayı

02:12.620 --> 02:13.550
değeridir.

02:13.580 --> 02:16.010
Bu tamsayı değerini iş parçacığı kimliği olarak adlandıralım.

02:16.310 --> 02:17.030
Doğru.

02:18.640 --> 02:22.360
Şimdi, bu fonksiyonun sorumluluğu yeni bir iş parçacığı oluşturmaktır.

02:22.660 --> 02:28.810
Şimdi P tipinde bir değişken almamız gerekiyor T Sağ özniteliği.

02:28.960 --> 02:34.510
Bu değişken, oluşturmakta olduğumuz yeni iş parçacığının özelliklerini belirtmek için kullanılır.

02:34.510 --> 02:35.290
Doğru.

02:35.850 --> 02:43.260
Birleştirilebilir bir iş parçacığı oluşturacağımızdan, oluşturacağımız iş parçacığının özelliklerini veya niteliklerini

02:43.260 --> 02:45.150
belirtmek için.

02:45.180 --> 02:48.750
Posix standardı bize iş parçacığı özelliğini sağlar.

02:48.750 --> 02:50.130
Durum olarak ayarlayın.

02:50.160 --> 02:57.510
Bu API özellikle oluşturacağımız iş parçacığının birleştirilebilir bir iş parçacığı mı yoksa ayrılmış bir iş parçacığı mı olduğunu

02:57.510 --> 02:59.220
belirtmek için kullanılır.

02:59.490 --> 03:00.330
Doğru.

03:00.480 --> 03:09.210
Yani bu API'de, sadece öznitelik değişkeninin adresini aktarın ve iş parçacığınızın birleştirilebilir bir iş parçacığı mı yoksa

03:09.210 --> 03:13.700
ayrılmış bir iş parçacığı mı olduğunu belirten bayrağı aktarın.

03:13.710 --> 03:14.400
Doğru.

03:15.740 --> 03:21.190
Posix standardının pthreadcreate joinable olan bu sabit değeri sağladığını varsayalım.

03:21.200 --> 03:29.900
Eğer ayrılmış bir iş parçacığı oluşturmak istiyorsanız, bu durumda pthreadcreate detached değerini belirtmeniz

03:29.900 --> 03:30.830
gerekir.

03:30.980 --> 03:31.760
Doğru.

03:33.530 --> 03:39.260
Dolayısıyla, bu niteliğe ikinci parametre olarak ne geçtiğinize bağlı olarak, oluşturacağınız yeni iş parçacığı birleştirilebilir

03:39.260 --> 03:41.570
veya ayrılabilir olacaktır.

03:41.570 --> 03:49.070
Dolayısıyla bu işlev, bu öznitelik değişkeninde ikinci argüman olarak belirttiğiniz değeri basitçe ayarlar.

03:49.100 --> 03:54.500
Artık bu öznitelik değişkeninin iç tanımı hakkında endişelenmenize gerek yok.

03:54.500 --> 03:59.180
Tek yapmanız gereken bu değişkenin adresini bu fonksiyona ilk argüman olarak aktarmaktır.

03:59.180 --> 03:59.990
Değil mi?

04:00.380 --> 04:08.630
Ve şimdi yeni bir iş parçacığı başlatmak için bir API iş parçacığı, alt çizgi, oluşturma çağırma konumundayız.

04:08.630 --> 04:09.230
Doğru.

04:09.230 --> 04:17.850
Yani 41 numaralı satır bir çatal noktasıdır ve bir iş parçacığı oluşturmamıza izin verin, iş parçacığı oluşturduğunuz iş parçacığı tanıtıcısını

04:17.850 --> 04:19.110
geçirin.

04:19.140 --> 04:24.600
Joinable olarak belirlediğimiz özniteliği geçirin.

04:24.960 --> 04:32.750
Kısa süre içinde belirleyeceğimiz iş parçacığı geri arama işlevini ve argümanı işleve geçirin.

04:32.760 --> 04:39.330
Şimdi fonksiyonun argümanı hiçbir şey değildir, ancak thread create fonksiyonuna ikinci bir argüman olarak aktardığımız

04:39.330 --> 04:41.040
bir tam sayıdır.

04:41.040 --> 04:50.100
Ve size söylediğim gibi, heap bellek deposunu veya statik depolamayı her zaman fonksiyona bir argüman olarak geçirmeliyiz.

04:50.490 --> 04:58.380
Bu nedenle, bu tamsayı girdisini depolamak için bir yığın bellek alacağım.

04:58.380 --> 04:59.190
Değil mi?

05:01.010 --> 05:05.600
Yani burada yerel değişkenin değil, yığın belleğin adresini geçiyorum.

05:05.630 --> 05:06.290
Doğru.

05:06.290 --> 05:12.590
Dolayısıyla 44 numaralı satır bir çatal noktasıdır ve işlev iş parçacığı işlev geri çağrısında yürütmeye başlayacak

05:12.590 --> 05:14.420
bir iş parçacığı oluşturacaktır.

05:14.420 --> 05:15.230
Doğru.

05:15.260 --> 05:19.940
Şimdi bu iş parçacığı geri arama işlevinin uygulanmasını tartışalım.

05:20.780 --> 05:27.110
Dolayısıyla, iş parçacığı işlevi geri çağrısında, söylediğim gibi, alt iş parçacığının yapacağı tek anlamlı

05:27.110 --> 05:32.030
iş, iş parçacığına argüman olarak aktardığımız girdinin karesini hesaplamaktır.

05:32.030 --> 05:32.780
Doğru.

05:32.810 --> 05:37.190
Öyleyse, iş parçacığı geri arama işlevine aktardığımız argümanı çıkaralım.

05:37.580 --> 05:38.450
Değil mi?

05:38.450 --> 05:45.140
Ve şimdi, bu argümanın değerini yerel bir değişkene okuduğumuz için, artık bu argümana kesinlikle

05:45.140 --> 05:46.910
ihtiyaç yoktur.

05:46.910 --> 05:49.130
Bu hafızayı serbest bırakabiliriz, değil mi?

05:49.490 --> 05:56.030
Ve şimdi bu iş parçacığının yürütülmesinde biraz zaman harcamasına izin verelim.

05:56.120 --> 05:56.930
Doğru.

05:56.960 --> 06:05.310
Herhangi bir mantığı takip edebilirsiniz, ancak benim yapacağım şey basitçe bir döngü oluşturacağım

06:05.310 --> 06:12.720
ve bu iş parçacığının işini yaptığını gösteren bir mesaj yazdıracağım ve bir saniyelik

06:12.720 --> 06:22.530
bir uyku yapacağım ve bu iş parçacığının bu işleve argüman olarak aktardığınız tamsayı sayısı kadar döngü içinde çalışmasını

06:22.560 --> 06:25.350
sağlayacağım.

06:25.350 --> 06:26.160
Değil mi?

06:26.700 --> 06:33.930
Yani tüm bu mantık, iş parçacığının işini doğru yapması için sonlu bir süre geçiyormuş

06:33.930 --> 06:36.240
gibi simüle etmek içindir.

06:36.900 --> 06:41.940
Ve işini tamamladıktan sonra, iş parçacığı sonucunu döndürmelidir.

06:42.150 --> 06:47.160
Bu nedenle iş parçacığının sonucu her zaman bir yığın depolama alanında döndürülmelidir.

06:47.280 --> 06:55.710
İşte bu nedenle, tamsayının karesini saklayacağım belleği kilitledim.

06:55.710 --> 06:56.420
Değil mi?

06:56.430 --> 07:02.340
İş parçacığı kimliğinin bu iş parçacığına argüman olarak aktardığımız tam sayı olduğunu hatırlayın ve ben

07:02.340 --> 07:06.750
sadece bu sayının karesini hesaplıyorum ve bu sonuç değişkeninde saklıyorum.

07:06.780 --> 07:10.380
Doğru ve sonuç, yığın depolama alanına bir işaretçidir.

07:10.680 --> 07:16.050
Şimdi bu iş parçacığı işlevi bu yığın depolama alanının adresini döndürmelidir.

07:16.050 --> 07:16.880
Değil mi?

07:16.890 --> 07:24.690
Bunu, iş parçacığı işlevinin dönüş değeri her zaman void star olduğundan, bu depolama işaretçisini bir void

07:24.690 --> 07:27.540
star olarak tipleyerek yapabilir.

07:27.540 --> 07:28.350
Doğru.

07:28.560 --> 07:32.040
Böylece bunun bu fonksiyonun uygulaması olduğunu görebilirsiniz.

07:32.040 --> 07:39.990
Ve bu işlevde, iş parçacığı bazı işler yapıyormuş gibi taklit edecek sınırlı miktarda zaman harcamayı

07:39.990 --> 07:41.430
seçiyoruz.

07:41.430 --> 07:47.640
Ve sonra basitçe tamsayının karesini hesaplarız ve sonuç olarak bu tamsayıyı döndürürüz.

07:47.640 --> 07:48.390
Değil mi?

07:48.570 --> 07:54.890
Şimdi ana fonksiyona geldiğimizde, iki iş parçacığı oluşturduğumuzu görebilirsiniz.

07:54.900 --> 08:01.770
İlk iş parçacığı işini yaparken iki saniye harcarken, ikinci iş parçacığı işini yaparken 10 saniye

08:01.770 --> 08:09.030
harcayacaktır, iki saniye sonra ikinci iş parçacığı sonlanacak ve 10 saniye sonra üçüncü iş parçacığı

08:09.030 --> 08:10.950
sonlanacaktır.

08:10.950 --> 08:11.580
Doğru.

08:11.940 --> 08:17.850
Şimdi bu iki çocuk iş parçacığının ana iş parçacığı olan ana iş parçacığımızın bu iki iş parçacığına katılmasını

08:17.850 --> 08:20.580
nasıl sağlayacağımızı görelim.

08:21.350 --> 08:26.570
Şimdi ana iş parçacığımızın iki numaralı iş parçacığının kendisine katılmasını beklemesini sağlayalım.

08:26.570 --> 08:27.140
Doğru.

08:27.170 --> 08:32.060
Bu basitçe, ana iş parçacığımızın bir API iş parçacığını çağırması gerektiği anlamına gelir, alt çizgi birleştirme.

08:32.060 --> 08:35.300
Doğru ve iş parçacığının tutamacını geçmesi gerekiyor.

08:35.330 --> 08:38.120
İki numara, bu ikinci konu.

08:38.740 --> 08:42.550
Ve şimdi iş parçacığından sonucu toplamak için.

08:42.580 --> 08:48.370
İki numara, P iş parçacığı işlevinin ikinci argümanı alt iş parçacığından döndürülen sonucu toplamak

08:48.370 --> 08:49.720
için kullanılır.

08:49.900 --> 08:55.600
Dolayısıyla, iş parçacığı sonucu iki aslında void star türünde bir değişkendir.

08:55.600 --> 08:56.470
Değil mi?

08:56.470 --> 09:03.580
Ve boş yıldız bellek konumunun adresini aktarmanız gerekir, böylece iki numaralı iş parçacığı

09:03.580 --> 09:10.300
gelip 88 numaralı satırdaki bu birleşme noktasına katıldığında, alt iş parçacığının sonucu

09:10.300 --> 09:15.130
bu beyaz iş parçacığı sonucu tarafından işaret edilecektir.

09:15.130 --> 09:15.870
Doğru.

09:15.910 --> 09:18.730
Yani bu bir işaretçi tipi değişkendir.

09:19.150 --> 09:23.140
Böylece ana iş parçacığı 88 numaralı satıra ulaştığında engellenecektir.

09:23.170 --> 09:23.910
Değil mi?

09:23.920 --> 09:30.940
Bu yüzden bloklamadan önce, ana iş parçacığımızın tam olarak neyi doğru yaptığını bize anlatmak için anlamlı bir mesaj

09:30.940 --> 09:32.680
yazdırmasına izin verin.

09:33.620 --> 09:39.980
Bu yüzden sadece ana iş parçacığımızın p iş parçacığında engellendiğine dair bir mesaj yazdırıyorum.

09:39.980 --> 09:43.000
İkinci konu için API'ye katılın.

09:43.010 --> 09:43.700
Doğru.

09:43.700 --> 09:45.770
Yani ana işlev p iş parçacığında engellendi.

09:45.770 --> 09:48.230
İkinci konu için katılın.

09:48.230 --> 09:48.950
Doğru.

09:51.030 --> 09:55.680
Şimdi ana iş parçacığımız 93 numaralı satırı çalıştıracaktır.

09:55.890 --> 10:02.370
Yalnızca alt iş parçacığı P iş parçacığı iki yürütmeyi tamamladığında ve 91 numaralı satırda ana iş parçacığımıza

10:02.370 --> 10:03.600
katıldığında.

10:03.600 --> 10:04.380
Doğru.

10:04.710 --> 10:11.310
P iş parçacığı katılımı engelleyici bir API'dir ve ana iş parçacığı, alt iş parçacığı p iş parçacığı ana iş parçacığımıza

10:11.340 --> 10:13.800
katılana kadar engellenecektir.

10:13.800 --> 10:14.580
Doğru.

10:14.850 --> 10:19.470
Böylece ana iş parçacığımız p iş parçacığı birleştirme işlevinde engeli kaldıracaktır.

10:19.500 --> 10:24.030
P thread two tarafından döndürülen sonuç bu bellek konumunda mevcut olacaktır.

10:24.030 --> 10:24.900
Doğru.

10:25.080 --> 10:26.550
Şuna bir bakalım.

10:26.550 --> 10:28.470
Bu bellek konumunda ne var?

10:28.500 --> 10:35.250
Her zaman alt iş parçacığının dönüş işaretçisinin null olup olmadığını kontrol edin çünkü bir iş parçacığı null döndürebilir.

10:35.280 --> 10:36.030
Doğru.

10:36.300 --> 10:42.150
Ve eğer null döndürmediyse, bu, bazı anlamlı içeriklere sahip anlamlı bir bellek olduğu anlamına

10:42.150 --> 10:43.010
gelir.

10:43.020 --> 10:47.730
Şimdi iş parçacığı tarafından döndürülen içeriği yazdıralım.

10:47.760 --> 10:48.390
İki.

10:48.570 --> 10:56.320
Yani yaptığım şey, basitçe thread result two değişkenini int star'a dönüştürmek ve değeri

10:56.320 --> 10:57.520
yazdırmak.

10:57.550 --> 10:58.300
Doğru.

10:58.330 --> 11:04.630
Bu, tam sayının karesinin bu belleğe yazıldığı ve benim bu tam sayıyı bu bellekten yazdırdığım

11:04.630 --> 11:06.160
anlamına gelir.

11:07.970 --> 11:13.900
Şimdi, sonucu çıkardıktan sonra, belleği serbest bırakacağım.

11:13.910 --> 11:14.630
Doğru.

11:14.660 --> 11:20.140
Bu iş parçacığı Sonuç iki'nin iş parçacığı geri arama işlevinde dinamik olarak ayrılmış bellek olduğunu unutmayın, bu nedenle

11:20.150 --> 11:22.350
onu doğru şekilde serbest bırakmanız gerekir.

11:22.370 --> 11:25.010
Aksi takdirde bellek sızıntısına neden olursunuz.

11:25.130 --> 11:30.020
Bu nedenle, alt iş parçacığından sonucu topladıktan sonra belleği serbest bırakmayı asla unutmayın.

11:30.020 --> 11:30.800
Değil mi?

11:31.100 --> 11:37.820
Alt iş parçacığı tarafından sonuçları sağlamak için kullanılan belleği serbest bırakmak üst iş parçacığının

11:37.820 --> 11:39.260
sorumluluğundadır.

11:39.350 --> 11:40.100
Doğru.

11:40.730 --> 11:44.940
Ve şimdi basitçe iş parçacığı sonucunu null değişkenine atayabilirsiniz.

11:44.960 --> 11:45.740
Doğru.

11:45.950 --> 11:51.230
Şimdi de benzer bir yaklaşımı üç numaralı konu için yapmamız gerekiyor.

11:52.280 --> 12:00.470
Bu nedenle, üç numaralı iş parçacığı için, kullanıcıya ana iş parçacığının engellendiğini bildirmek için yine bir mesaj yazdıracağım.

12:00.500 --> 12:02.630
Üç numaralı çocuk ipliği için.

12:02.810 --> 12:10.280
Şimdi ana iş parçacığımız p thread join fonksiyonunu tekrar çağıracak, ancak bu sefer bu fonksiyonu sağdaki thread handle

12:10.280 --> 12:16.700
three üzerinde çağıracak ve p thread three tarafından döndürülen sonucu toplamak için voidstart tipi

12:16.700 --> 12:19.490
değişkenin adresini aktaracaktır.

12:19.520 --> 12:20.350
Doğru.

12:20.360 --> 12:27.260
Dolayısıyla, ikinci p iş parçacığı birleştirme işlevini çağırdıktan sonra, ana iş parçacığımız

12:27.260 --> 12:29.780
105 numaralı satırda engellenir.

12:29.780 --> 12:35.120
Üç numaralı iş parçacığının yürütmeyi tamamlayıp geri dönmesi bekleniyor.

12:35.570 --> 12:41.840
Şimdi yine, ana iş parçacığımızın üç numaralı iş parçacığı tarafından sağlanan sonucu toplaması

12:41.840 --> 12:42.620
gerekiyor.

12:43.070 --> 12:50.810
Bu da aynı mantığı izleyeceğimiz ve üç numaralı iş parçacığı tarafından döndürülen tamsayı değerini okumaya

12:50.810 --> 12:53.730
çalışacağımız anlamına gelir.

12:54.120 --> 12:54.920
Doğru.

12:54.930 --> 12:58.560
Böylece demo programımızın uygulaması tamamlanmış oldu.

12:58.740 --> 13:03.090
Yani her şeyin oldukça basit ve anlaşılır olduğunu görebilirsiniz.

13:03.610 --> 13:09.220
Bu demo programda yaptığım şey, ana iş parçacığından iki alt iş parçacığı oluşturmak,

13:09.340 --> 13:10.150
değil mi?

13:10.150 --> 13:16.450
Ve bu iki alt iş parçacığı, bu iş parçacıklarına argüman olarak aktarılan tamsayı değerinin karesini

13:16.450 --> 13:17.620
hesaplar.

13:17.620 --> 13:18.430
Doğru.

13:18.430 --> 13:20.230
Ve bu ana konu.

13:20.230 --> 13:26.860
Önce iki numaralı iş parçacığının katılmasını bekleyin ve iki numaralı iş parçacığı geri gelip ana iş parçacığına katıldığında,

13:26.860 --> 13:31.450
ana iş parçacığı iki numaralı iş parçacığı tarafından sağlanan sonucu toplar.

13:31.450 --> 13:32.260
Doğru.

13:32.320 --> 13:36.340
Bundan sonra ana iş parçacığımız üç numaralı iş parçacığının katılmasını bekler.

13:36.460 --> 13:37.300
Doğru.

13:37.300 --> 13:42.970
Ve üç numaralı iş parçacığı geri gelip ana iş parçacığına katıldığında, ana iş parçacığı sadece üç numaralı

13:42.970 --> 13:45.820
iş parçacığı tarafından sağlanan sonucu toplar.

13:45.850 --> 13:46.540
Doğru.

13:48.280 --> 13:50.980
Yani aynı şey bu diyagramda da gösterilmektedir.

13:50.980 --> 13:52.330
Bir ana iş parçacığımız var.

13:52.360 --> 13:53.770
İki konu başlığı oluşturmuştur.

13:53.800 --> 13:57.610
İki numaralı iplik ve üç numaralı iplik bir birleşme noktası J bir.

13:57.640 --> 13:59.470
Ana iş parçacığımız iş parçacığını bekliyor.

13:59.500 --> 14:05.920
Ana iş parçacığımıza katılmak ve J bağlantı noktasını eklemek için iki numaralı iş parçacığı, üç numaralı iş parçacığının katılmasını

14:05.920 --> 14:06.610
bekliyor.

14:06.610 --> 14:07.360
Doğru.

14:07.910 --> 14:14.210
Şimdi demo programını çalıştıracağım ve beklentim iki numaralı iş parçacığının iki saniye

14:14.210 --> 14:16.070
boyunca çalışması.

14:16.070 --> 14:20.570
Ve sonlandırıldığında, ana iş parçacığına dört değerini döndürmelidir.

14:20.570 --> 14:21.110
Doğru.

14:21.110 --> 14:24.500
Ve üç numaralı iplik 10 saniye boyunca çalışmalıdır.

14:24.500 --> 14:28.760
Ve sonlandırıldıktan sonra ana iş parçacığına 100 değerini döndürmelidir.

14:28.760 --> 14:29.510
Doğru.

14:29.510 --> 14:36.080
Programı çalıştırdığımda, iki numaralı iş parçacığımızın iki saniye boyunca çalıştığını ve ardından sonucu ana iş parçacığına

14:36.080 --> 14:38.600
döndürdüğünü görebilirsiniz.

14:38.600 --> 14:39.380
Doğru.

14:42.870 --> 14:47.730
Programı çalıştırdığınızda, ana fonksiyonun veya ana iş parçacığının ilk p iş parçacığında bloke olduğunu

14:47.730 --> 14:48.540
görebilirsiniz.

14:48.540 --> 14:49.520
Aramaya katıl.

14:49.530 --> 14:50.280
Doğru.

14:50.900 --> 14:54.110
Yani, iki numaralı iş parçacığının katılmasını bekliyor.

14:54.940 --> 15:02.260
İki numaralı iş parçacığı iki saniye boyunca işini yaptıktan sonra sonlandırılır ve ana iş parçacığına katılmak

15:02.260 --> 15:04.630
üzere ana iş parçacığına geri döner.

15:04.630 --> 15:05.290
Doğru.

15:05.290 --> 15:11.380
Ana iş parçacığı ve iki numaralı iş parçacığı ana iş parçacığına katıldığında, ana iş parçacığı iki numaralı

15:11.380 --> 15:18.150
iş parçacığının sonucunu toplar ve sadece iki numaralı iş parçacığı tarafından döndürülen sonucu yazdırır.

15:18.160 --> 15:18.910
Doğru.

15:19.420 --> 15:25.360
Şimdi burada ana iş parçacığının ilk p iş parçacığından engellenmediğini görebilirsiniz.

15:25.360 --> 15:33.760
Ana iş parçacığına katılın, ardından ilk birleşme noktasının ötesinde yürütmeye devam edin ve ardından ikinci birleşme

15:33.760 --> 15:35.680
noktasında engellenir.

15:35.770 --> 15:36.610
Doğru.

15:37.000 --> 15:43.510
Ve üç numaralı iş parçacığı birkaç saniye daha çalışırken, üç numaralı iş parçacığı geri gelip ana iş parçacığına

15:43.510 --> 15:48.640
katıldığında, ana iş parçacığı üç numaralı iş parçacığının sonucunu toplar ve doğru şekilde

15:48.640 --> 15:49.870
yazdırır.

15:49.870 --> 15:52.900
Ve bundan sonra ana iş parçacığımız da sonlanır.

15:53.260 --> 15:59.510
Şimdi bu programda, size bir soru sorarsam, iki numaralı P iş parçacığı 10 saniye boyunca çalıştırılsaydı

15:59.510 --> 16:07.520
ve ardından üç numaralı P iş parçacığı iki saniye boyunca çalıştırılsaydı senaryo ne olurdu, değil mi?

16:07.550 --> 16:15.590
Bu yüzden sizden bu değerleri değiştirmenizi ve alt iş parçacıklarını farklı zaman aralıklarında beklettiğinizde programınızın

16:15.590 --> 16:20.660
nasıl davrandığını gözlemleyerek anlamaya çalışmanızı rica ediyorum.

16:20.660 --> 16:21.290
Doğru.
