Evet arkadaşlar, şimdi kritik bölümlerin ne olduğunu anlamaya çalışalım.
Kritik bölüm, iş parçacığı senkronizasyonundan bahsederken en sık kullanılan terimdir.
Yani kod Alıntı Bir sürecin paylaşılan verilerine erişmek kritik bölümlerdir.
Paylaşılan veriler global değişkenler olabilir.
Yığın veri yapıları olabilir, statik değişkenler olabilir veya dediğim gibi, soketler gibi açık dosya
tanımlayıcıları olabilir.
Bu nedenle temel kural, kritik bölümlerin eşzamanlı iş parçacıkları tarafından, ancak her seferinde yalnızca bir iş parçacığı
tarafından yürütülmesi gerektiğidir.
Yani P sürecinizde birden fazla iş parçacığı, t1 iş parçacığı, T2 ve T3 iş parçacığı olabilir.
Doğru.
Dolayısıyla, bu sarı renkli bölgeye iş parçacığı, T1 iş parçacığı, T2 ve T3 tarafından aynı anda erişilmesine izin verirsek,
bu renkli bölge kritik bölüm haline gelir.
Değil mi?
Neden?
Bu kritik bir bölümdür çünkü bu bölge içinde global değişkene erişmeye çalışıyorsunuz.
Değil mi?
Dolayısıyla, sürecin birden fazla eşzamanlı iş parçacığının kritik bölümü korumasız bir şekilde
yürütmesine izin verirseniz, programınız beklenmedik bazı davranışlar üretebilir.
Programınız segment hatası verebilir.
Programınız veri bozulması gösterebilir veya programınız herhangi bir anormal davranış gösterebilir.
Dolayısıyla iş parçacığı senkronizasyonu, programınızdaki kritik bölümü belirlemek ve sürecin birkaç iş parçacığı
tarafından paylaşılan kaynaklara korumasız eşzamanlı erişimi önlemek için çeşitli teknikler uygulamakla ilgilidir.
İş parçacığı senkronizasyonu tamamen bununla ilgilidir.
Çok basit bir örnek verelim.
Sol tarafta bir program düşünün.
Bu programda statik bir I değişkeniniz var ve i1 i2 ve i3 komutlarınız var ve program çok basit,
değil mi?
Şimdi diyelim ki foo işlevi üç eşzamanlı iş parçacığı tarafından yürütülürse, programın olası
çıktıları nelerdir?
Doğru.
Bu basit bir mülakat sorusudur.
Kodun bu kısmının T1, T2 ve T3 olmak üzere üç eş zamanlı iş parçacığı tarafından yürütülmesine izin verirseniz,
bu programın üretebileceği olası çıktılar nelerdir?
Sana bırakıyorum.
Dolayısıyla bu program, iş parçacığı yürütme sırasına bağlı olarak farklı çıktılar üretebilir.
Yani o konuyu görebilirsiniz.
T1, I1 ve I2 komutlarını tamamlayabilir ve ardından bağlam geçişi gerçekleşebilir ve T2 iş parçacığı
I1 ve i2 ve i3 komutlarını yürütmek için işlemciye yüklenebilir.
Daha sonra t2 iş parçacığı CPU ve iş parçacığından boşaltılabilir.
T3 CPU'ya yüklenebilir ve bu, üç iş parçacığı da bu kısa programın tüm talimatlarını yerine getirene
kadar devam eder.
Böylece i1 i2 ve i3 komutlarının, işletim sisteminizin bu iş parçacıklarını CPU üzerinde nasıl programladığına bağlı olarak
bu üç iş parçacığı tarafından herhangi bir sırada yürütülebileceğini görebilirsiniz.
Doğru.
Bir iş parçacığı CPU'dan çıkarılabilir ve herhangi bir zamanda CPU'ya yeni bir iş parçacığı yüklenebilir.
Şu anda bu kısa programda, eğer I yerel bir değişken olarak değiştirilirse, o zaman hiçbir kritik bölüm
yoktur.
Doğru.
Çünkü bu durumda I değerindeki herhangi bir güncelleme diğer iş parçacığı tarafından görülmeyecektir.
Doğru.
Aynı veritabanını veya aynı veri yapısını güncellemeye çalışan iki veya daha fazla iş parçacığı ya da aynı bellek tamponlarına
okuma veya yazma işlemleri gerçekleştirmeye çalışan iki veya daha fazla iş parçacığı kritik bölümlere örnek olarak
verilebilir.
Bunlar kritik bölümün diğer iki örneğidir.
Dolayısıyla kritik bölümler, iş parçacığı senkronizasyon teknikleri kullanılmadan birden fazla iş parçacığı
tarafından erişilmelerine izin verilmesi durumunda uygulamanın er ya da geç başarısızlığa uğrayacağı anlamında kritiktir.
Değil mi?
Dolayısıyla, bu kurs boyunca kritik bölümleri belirleyeceğiz ve bu kritik bölümü, iş parçacığı
senkronizasyon tekniklerinden birini veya daha fazlasını veya kombinasyonunu kullanarak sürecin birden fazla
iş parçacığı tarafından korumasız eşzamanlı erişime karşı koruyacağız.