Evet arkadaşlar, az önce çoklu iş parçacığını gösteren Hello World örneğimizi yazdık.
Şimdi, bir Hello World örneği kullanarak, argüman geçirme yarış koşulları, iş parçacığı sonlandırma
gibi çoklu iş parçacığının bazı yönlerini tartışacağız ve ardından bunu tartışacağız.
Ana işlev veya ana iş parçacığı öldüğünde Çok iş parçacıklı program üzerindeki etkisi nedir?
Birinci noktadan başlayarak, daha önce de açıkladığım gibi, iş parçacığına bir argüman ilettiğinizde,
API oluşturmanın altını çizin.
Bu, bu konunun son tartışmasıdır.
Alt çizgi, belleğin statik bellek veya yığın üzerinde bir bellek olması gerektiğini API oluşturur.
Değil mi?
Asla yığın veya yerel değişken üzerinde bir bellek olmamalıdır.
Hello World örneğimizin uygulamasını tartışırken bu noktayı zaten oldukça ayrıntılı
bir şekilde tartışmıştım.
Şimdi iki numaralı noktaya geçelim.
Bu, iş parçacığı oluşturmadaki yarış koşuludur.
Yani bu nokta, yeni iş parçacığı oluşturma sırasında bir yarış koşulunun meydana geldiği anlamına gelir.
Bu noktayı açıklamak için, ekranda görebileceğiniz gibi, bir T1 ipliğim var ve bu da çatal noktası.
T1 iş parçacığı başka bir t2 iş parçacığı oluşturur.
Şimdi, çatal noktasından hemen sonra bir I1 komutu olduğunu varsayalım.
İş parçacığının yürütme akışında mevcut olan.
T1 Sağ.
Ve çatal noktasından hemen sonra, iş parçacığının yürütme akışındaki ilk komut olan bir
I2 komutu vardır.
T2 Sağ.
Diyelim ki I1 talimatı hiçbir şey değil, sadece T1 yazdır diyor, değil mi?
Ve I2 talimatı Örneğin, basitçe T2 Sağa yazdır diyor.
Şimdi bu örnekle birlikte, yarış koşulu tam olarak nedir?
Yani burada yarış koşulu, f çatal noktasından hemen sonra, ilk çalıştırılacak komutun
I1 olup olmayacağını söyleyemeyeceğiniz anlamına gelir.
Yoksa önce çalıştırılacak olan I2 talimatı mı?
I1'in I2'den önce mi yoksa i2'nin I1'den önce mi yürütüleceğini söyleyemezsiniz.
Bu, programcının elinde değildir.
Bu nedenle, Çok iş parçacıklı uygulamalar yazarken, bir geliştirici olarak her zaman önce I1 veya I2 komutunun
yürütüleceğini varsaymak zorunda değilsiniz.
I1 veya i2 olan herhangi bir talimat diğerine geçebilir.
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.
Doğru.
İşletim sistemi CPU'da ilk olarak T1 iş parçacığını planlarsa, ilk olarak yürütülecek
olan I1 komutudur.
Ancak işletim sisteminiz CPU'daki T2 iş parçacığını çatal noktasından sonra programlıyorsa,
ilk olarak i2 komutu yürütülecektir.
Dolayısıyla, çatal noktasından hemen sonra ortaya çıkan bu tür bir belirsizliğe yarış koşulu denir.
Buradaki yarış koşulu, i1 ya da i2 komutlarından hangisinin önce çalıştırılacağını söyleyemeyeceğinizi
ifade eder.
Ancak 99'da durum farklıydı. 9, ilk çalıştıracağımız komutun I1 olması
ihtimali vardır.
Bunun nedeni, T1 iş parçacığına çatal noktasında CPU'nun zaten tahsis edilmiş olmasıdır.
Doğru.
Ve işletim sisteminizin CPU'yu T1 iş parçacığından alıp yeni doğan iş parçacığına tahsis
etmesi için geçerli bir olasılık vardır.
T2 sağda.
Bunun gerçekleşme olasılığı çok düşük, ama var, değil mi?
Dolayısıyla, bir geliştirici olarak çok iş parçacıklı programlar yazarken, I1 ve I2 komutları arasında sabit
bir yürütme sırası varsayamazsınız.
Bu, iş parçacığı oluşturmada yarış koşulu olarak adlandırılır.