WEBVTT

00:04.990 --> 00:09.760
Evet arkadaşlar, az önce çoklu iş parçacığını gösteren Hello World örneğimizi yazdık.

00:09.790 --> 00:15.190
Şimdi, bir Hello World örneği kullanarak, argüman geçirme yarış koşulları, iş parçacığı sonlandırma

00:15.190 --> 00:20.230
gibi çoklu iş parçacığının bazı yönlerini tartışacağız ve ardından bunu tartışacağız.

00:20.230 --> 00:25.480
Ana işlev veya ana iş parçacığı öldüğünde Çok iş parçacıklı program üzerindeki etkisi nedir?

00:27.590 --> 00:33.440
Birinci noktadan başlayarak, daha önce de açıkladığım gibi, iş parçacığına bir argüman ilettiğinizde,

00:33.440 --> 00:36.080
API oluşturmanın altını çizin.

00:37.480 --> 00:39.740
Bu, bu konunun son tartışmasıdır.

00:39.760 --> 00:45.460
Alt çizgi, belleğin statik bellek veya yığın üzerinde bir bellek olması gerektiğini API oluşturur.

00:45.460 --> 00:46.090
Değil mi?

00:46.090 --> 00:49.840
Asla yığın veya yerel değişken üzerinde bir bellek olmamalıdır.

00:50.020 --> 00:55.450
Hello World örneğimizin uygulamasını tartışırken bu noktayı zaten oldukça ayrıntılı

00:55.450 --> 00:57.150
bir şekilde tartışmıştım.

00:57.160 --> 00:59.080
Şimdi iki numaralı noktaya geçelim.

00:59.110 --> 01:02.110
Bu, iş parçacığı oluşturmadaki yarış koşuludur.

01:02.500 --> 01:07.850
Yani bu nokta, yeni iş parçacığı oluşturma sırasında bir yarış koşulunun meydana geldiği anlamına gelir.

01:07.870 --> 01:15.580
Bu noktayı açıklamak için, ekranda görebileceğiniz gibi, bir T1 ipliğim var ve bu da çatal noktası.

01:15.610 --> 01:20.110
T1 iş parçacığı başka bir t2 iş parçacığı oluşturur.

01:22.440 --> 01:29.280
Şimdi, çatal noktasından hemen sonra bir I1 komutu olduğunu varsayalım.

01:30.750 --> 01:33.510
İş parçacığının yürütme akışında mevcut olan.

01:33.540 --> 01:35.130
T1 Sağ.

01:35.130 --> 01:41.640
Ve çatal noktasından hemen sonra, iş parçacığının yürütme akışındaki ilk komut olan bir

01:41.640 --> 01:43.050
I2 komutu vardır.

01:43.080 --> 01:44.580
T2 Sağ.

01:44.610 --> 01:51.060
Diyelim ki I1 talimatı hiçbir şey değil, sadece T1 yazdır diyor, değil mi?

01:51.060 --> 01:56.820
Ve I2 talimatı Örneğin, basitçe T2 Sağa yazdır diyor.

01:57.460 --> 02:02.470
Şimdi bu örnekle birlikte, yarış koşulu tam olarak nedir?

02:03.230 --> 02:10.040
Yani burada yarış koşulu, f çatal noktasından hemen sonra, ilk çalıştırılacak komutun

02:10.040 --> 02:14.810
I1 olup olmayacağını söyleyemeyeceğiniz anlamına gelir.

02:14.810 --> 02:19.520
Yoksa önce çalıştırılacak olan I2 talimatı mı?

02:19.550 --> 02:25.400
I1'in I2'den önce mi yoksa i2'nin I1'den önce mi yürütüleceğini söyleyemezsiniz.

02:25.910 --> 02:28.400
Bu, programcının elinde değildir.

02:28.920 --> 02:35.820
Bu nedenle, Çok iş parçacıklı uygulamalar yazarken, bir geliştirici olarak her zaman önce I1 veya I2 komutunun

02:35.820 --> 02:39.480
yürütüleceğini varsaymak zorunda değilsiniz.

02:39.480 --> 02:43.950
I1 veya i2 olan herhangi bir talimat diğerine geçebilir.

02:44.730 --> 02:52.080
Her şey işletim sisteminizin önce T1 iş parçacığını mı yoksa önce T2 iş parçacığını mı programladığına bağlıdır.

02:52.080 --> 02:52.800
Doğru.

02:54.420 --> 03:00.840
İşletim sistemi CPU'da ilk olarak T1 iş parçacığını planlarsa, ilk olarak yürütülecek

03:00.840 --> 03:02.370
olan I1 komutudur.

03:02.370 --> 03:09.390
Ancak işletim sisteminiz CPU'daki T2 iş parçacığını çatal noktasından sonra programlıyorsa,

03:09.390 --> 03:12.840
ilk olarak i2 komutu yürütülecektir.

03:13.260 --> 03:20.350
Dolayısıyla, çatal noktasından hemen sonra ortaya çıkan bu tür bir belirsizliğe yarış koşulu denir.

03:20.370 --> 03:27.810
Buradaki yarış koşulu, i1 ya da i2 komutlarından hangisinin önce çalıştırılacağını söyleyemeyeceğinizi

03:27.810 --> 03:29.100
ifade eder.

03:30.290 --> 03:37.790
Ancak 99'da durum farklıydı. 9, ilk çalıştıracağımız komutun I1 olması

03:37.790 --> 03:39.380
ihtimali vardır.

03:39.410 --> 03:45.320
Bunun nedeni, T1 iş parçacığına çatal noktasında CPU'nun zaten tahsis edilmiş olmasıdır.

03:45.320 --> 03:45.950
Doğru.

03:45.950 --> 03:51.800
Ve işletim sisteminizin CPU'yu T1 iş parçacığından alıp yeni doğan iş parçacığına tahsis

03:51.830 --> 03:54.980
etmesi için geçerli bir olasılık vardır.

03:55.010 --> 03:56.210
T2 sağda.

03:56.240 --> 04:02.870
Bunun gerçekleşme olasılığı çok düşük, ama var, değil mi?

04:03.680 --> 04:10.610
Dolayısıyla, bir geliştirici olarak çok iş parçacıklı programlar yazarken, I1 ve I2 komutları arasında sabit

04:10.610 --> 04:12.980
bir yürütme sırası varsayamazsınız.

04:13.160 --> 04:16.760
Bu, iş parçacığı oluşturmada yarış koşulu olarak adlandırılır.
