Evet arkadaşlar, şimdi iş parçacığı bariyerini tanımlayan veri yapısını tartışalım.
Bu nedenle, veri yapısını tartışmadan önce, iş parçacığı bariyerinin dahili olarak nasıl çalıştığını anlamamız gerekir.
Yani iplik bariyeri röle kavramı üzerinde çalışır.
Yani röle, sadece sinyal verilen bir iş parçacığı anlamına gelir, yani engellenmiş durumdan yürütmeye yeni devam
eden iş parçacığı, diğer blok iş parçacıklarına yürütmelerine devam etmeleri için sinyal verecek ve böylece bir sinyal zinciri
oluşturacaktır.
Doğru.
Günlük hayatımızda, yolda bir barikata takıldığımızda, barikatı bu şekilde geçiyoruz.
Otorite bize izin verdiğinde, barikatı bir bir aşıyoruz, öyle değil mi?
İplik bariyeri de bu şekilde çalışır.
Şimdi bir örnek yardımıyla iplik bariyerinin işleyişini tartışalım.
Diyelim ki bir iş parçacığı bariyerimiz var ve iş parçacığı bariyerini uygulama kodumuzdaki
100 numaralı satıra yerleştirdik.
İşte bariyer noktası burası.
Ve bu iş parçacığı bariyerinin eşik değeri üç ile başlatıldığını varsayalım.
Şimdi birinci iş parçacığının geldiğini ve bariyer noktasına çarpıp bloke olduğunu varsayalım.
Benzer şekilde, T2 tehdidi gelir, bariyer noktasına çarpar ve engellenir.
Ve şimdi Tehdit T3 geliyor ve bariyer noktasına çarpıyor ve engellenmeden tehdit T3 bariyer noktasını
aştı.
Şimdi T3 tehdidi bariyer noktasını aştığında, T3 tehdidi bir sinyal üretir.
Doğru.
Bu sinyal, bariyer üzerinde engellenen iş parçacıklarından biri tarafından tüketilecektir.
Bu iş parçacığı t1 iş parçacığı veya yazılacak t iş parçacığı olabilir.
T2 tehdidi bariyer noktasının ötesinde yürütmeye devam ettiğinde, tehdidin bu sinyali tükettiğini ve dolayısıyla
tehdidin bariyer noktasının ötesinde yürütmeye devam ettiğini varsayalım.
Şimdi T2 tehdidi bir sinyal üretir ve bu sinyal bariyer noktasında engellenen başka bir iş parçacığı tarafından
tüketilir.
Doğru.
Ve bu zincir, bariyer noktasında engellenen son iş parçacığı sinyali aldığı için yürütmeye devam
ettiğinde devam eder, o zaman böyle bir tehdit herhangi bir sinyal üretmez.
Değil mi?
Yani bu örnekte T1 iş parçacığı herhangi bir sinyal üretmez çünkü bu sinyale ihtiyaç duyan bir
tehdit yoktur, bu kadar basit.
Yani tüm bu tasarımda, ipliği görür görmez bunu görebilirsiniz.
Bariyer noktasının ötesinde yürütmeye devam eder.
Sinyalin alınmasının bir sonucu olarak, iş parçacığının kendisi bir sinyal üretir, böylece bariyer noktasında
engellenen sonraki iş parçacığı bu sinyali işleyerek yürütmeye devam edebilir.
Ve tekrar yürütmeye devam eden iş parçacığı yine aynı şeyi yaparak bariyer noktasında engellenen başka bir iş
parçacığının yürütmeye devam etmesine izin verecektir.
Doğru.
Yani bu, bir iş parçacığının bir sonraki iş parçacığının yürütmeye devam etmesine izin vermek için bir sinyal ürettiği
bir tür zincirdir.
Ve devam ediyor.
Dolayısıyla bu kavrama röle kavramı denir.
İş parçacığı bariyerlerini uygulayacağımız zaman benzer bir şema uygulayacağız.
Tüm bu mantık bu başlıkta uygulanacak.
Bariyer Barikat.
Şimdi bir iş parçacığı bariyerini temsil edecek bir veri yapısını tartışalım.
Böylece, bunun iş parçacığı bariyerimizi temsil edeceğimiz bir veri yapısı olduğunu görebilirsiniz.
Bu veri yapısının her bir alanını ele alalım ve bu alanı iplik bariyerinin işleyişiyle ilişkilendirmeye
çalışalım.
İlk alan olan maksimum sayı, bir eşik değerinden başka bir şey değildir.
Ya da kod yazarken bu alanı eşik sayısı olarak yeniden adlandıracağız.
Daha sonra mevcut ağırlık sayısı, bariyerde bekleyen veya engellenen iş parçacıklarının mevcut sayısıdır.
Böylece mevcut ağırlık sayısının değeri sıfırdan eşik eksi bire gidecektir.
Doğru.
Daha önce de belirttiğimiz gibi, iş parçacığı bariyerinde engellenebilecek maksimum iş parçacığı
sayısı n eksi birdir ve burada n bariyerin eşik değeridir.
Şimdi iş parçacığı bariyerinin ana işlevi iş parçacıklarını engellemektir ve bu nedenle iş parçacıklarının engelleneceği
bir koşul değişkenine ihtiyacımız vardır.
Doğru.
Çalışan bir iş parçacığını engellemek için bir koşul değişkenine ve bir mutekse ihtiyacınız olduğunu zaten biliyoruz.
Yani bu, bir iş parçacığı bariyeri üzerinde birbirini dışlayan işlemler gerçekleştirmek için kullanılacak muteks'tir.
İş parçacığı bariyeri, uygulamanın birkaç iş parçacığı arasında paylaşılan bir veri yapısı olduğundan, iş parçacığı
bariyeri üzerindeki herhangi bir işlemi karşılıklı olarak dışlama şeklinde gerçekleştirmemiz gerekir.
Ve bunun için bir mutekse ihtiyacımız var.
Şimdi bu iki alan bariyer eğilimi ile ilgilidir.
Bu Boolean alanı, bariyer yerleştirme işleminin devam edip etmediğini takip eder.
Yani varsayılan olarak yine hazır.
Bayrak varsayılan olarak false olarak ayarlanmıştır.
Doğru.
Ancak iş parçacığı bariyeri elden çıkarma aşamasına girdiğinde, bu alan true olarak ayarlanır ve bu da iş parçacığı
bariyeri elden çıkarma işleminin devam ettiği anlamına gelir.
Ve tüm iş parçacığı atıldıktan sonra, bu alan false olarak ayarlanır, bu da iş parçacığı bariyerinin atılmasının
tamamlandığını ve iş parçacığı bariyerinin artık tekrar kullanılabileceğini gösterir.
Bu da ihtiyacımız olan ek koşul değişkenidir.
İş parçacığı bariyeri kullanımdayken herhangi bir iş parçacığının iş parçacığı bariyerini kullanmasına izin vermemek için bu koşul
değişkenine ihtiyacımız var.
İlerleme aşaması.
Doğru.
Diyelim ki bu örnekte.
Konu.
Bir tanesi hala iplik bariyerinde bloke edilmiş durumda.
Üçüncü iş parçacığı bariyer noktasını çoktan geçmiştir ve ikinci iş parçacığı da bariyer noktasını geçmiştir çünkü
iş parçacığından bir sinyal almıştır.
Üç.
Ancak birinci iplik henüz infazına devam etmedi.
Bu, bariyer noktasında hala engellenmiş olan bazı iş parçacıkları olduğu anlamına gelir ve bir iş parçacığı
bariyerinin elden çıkarma aşamasında olduğunu söyleriz.
Şimdi, iş parçacığı bariyeri yerleştirme aşamasında olduğu sürece, uygulamanın bir iş
parçacığı gelir ve bariyer noktasına çarparsa, bu durumda iş parçacığını meşgul CV koşul
değişkeninde üç dört engelleyeceğiz.
Bu, iş parçacığı bariyeri bariyer elden çıkarma aşamasındaysa herhangi bir tehdidin iş parçacığı bariyerine erişmesine izin
vermediğimiz anlamına gelir.
Bu nedenle, bariyerlerin yerleştirilmesi devam ederken iş parçacığı bariyerini kullanmaya çalışan
herhangi bir ek iş parçacığını engelleyeceğimiz ek bir koşul değişkenine ihtiyacımız var.
İşte böyle.
İşini yapmakla meşgul olan bir veri yapımız var ve veri yapısı kullanılabilir hale gelene
kadar bu veri yapısını tekrar kullanmak istemiyoruz.
Doğru.
Bu yüzden iş parçacığı bariyerimizi başlatan bir API iş parçacığı bariyeri yazacaktık.
İş parçacığı bariyerinin adresini ve bir tamsayı değeri olan bir eşik değerini geçeceğiz.
Ve bu değer iş parçacığı bariyerini eşik sayısı ile başlatır.
Bu yüzden bir sonraki ders videosundan itibaren iş parçacığı bariyerlerinin uygulanmasına başlayacağız.