Şimdi iş parçacığı bariyerinin işlevselliğini göstermek için yapacağım şey main dot C dosyasını
yazmak olacak ve bu dosyada size iş parçacığı bariyerinin nasıl kullanılacağını göstereceğim.
Dolayısıyla bu main dot c dosyası iş parçacığı bariyerini kullanan uygulamayı temsil eder.
Yapacağım ilk şey bir iş parçacığı bariyeri nesnesi almak ve bazı iş parçacıklarına ihtiyacım var, böylece bu iş parçacıklarını
iş parçacığı bariyerinde engelleyebilirim.
Bunun için üç iplik tutamacını doğru alayım.
Şimdi ana işlevime başlayayım.
Ve bu ana işlevde, iş parçacığı bariyerimizi eşik sayısı değeri üçe eşit olacak şekilde başlatmama izin
verin çünkü üç iş parçacığı aldım, değil mi?
Şimdi bu konuların her birine başlamama izin verin.
Bir başlık başlatmak için, başlığımı tanımlayan bir başlık tanımlayıcısı alayım.
Bu yüzden her bir başlığıma bir isim verecektim.
Bu durumda, diyelim ki bir iplik alıyorum ve sonra ipliğimi başlatacağım.
Bir numara sıfır numara, değil mi?
Bu, uygulayacağımız iş parçacığı işlevi geri çağrısıdır ve iş parçacığı tanımlayıcısını bu işleve
bir argüman olarak iletir, böylece iş parçacığı bariyerimizin beklendiği gibi çalışıp çalışmadığını
belirlememize yardımcı olacak iş parçacığı adını yazdırabiliriz.
Aynı şekilde, kalan iki başlığı da aynı şekilde başlatacağım.
İş parçacıklarının adı iş parçacığı iki ve iş parçacığı üçtür ve bu iş parçacıklarının tümü aslında iş parçacığını yürütmektedir.
Aynı iş parçacığı işlevi geri çağrısı.
Doğru.
Bu iş parçacığı işlevi geri aramasında, size iş parçacığı bariyerinin gösterimini göstereceğiz.
Ve son olarak, ana fonksiyonumuz almamalıdır.
Ve bu yüzden p thread join API'sini çağırmama izin verin.
Değil mi?
Tabii tüm başlıklar geri gelip ana başlığa katılmazsa.
Başvurumuz sonlandırılmayacaktır.
Ve uygulamamız sonlanmadan hemen önce, iş parçacığı bariyerinin durumunu yazdıralım,
böylece uygulama sonlanmadan önce iş parçacığı bariyerimizin doğru durumda bırakıldığını doğrulayabiliriz.
Doğru durum, bu iş parçacığı bariyerinde bekleyen mevcut iş parçacığı sayısının şu anda sıfır
olması gerektiğidir.
Bu iş parçacığı işlevi geri çağrısının uygulamasını görelim.
Dolayısıyla, bu iş parçacığı işlevi geri arama işlevinin uygulanmasıyla başlamak için yapacağım
şey şudur.
Ben olsam sadece iplik bariyerini yerleştirirdim.
Bekle.
Bu fonksiyonun başında çağırın.
Bu, başlangıçta tüm bu üç iş parçacığının bu iş parçacığı bariyerinde bloke olacağı anlamına gelir.
Değil mi?
Ve üç iplik de bu bariyer noktasına ulaşana kadar bloke olurlar.
Yani on numaralı hat bariyer noktası.
Ve bundan sonra sadece ilk barikatın tüm iplikler tarafından temizlendiğini yazdıracağım.
Doğru.
Bu yüzden 12 numaralı satır üç kez yazdırılmalıdır.
Yani her üç iş parçacığı da 12 numaralı satırı yazdırmalıdır çünkü iş parçacığı bariyeri atıldığında
her üç iş parçacığı da bu bariyer noktasının ötesinde yürütmeye devam edecektir.
Ardından 14 numaralı satıra ikinci bariyer noktasını yerleştirir ve aynı şeyi yaparım.
Printf deyimini yerleştirecektim.
Dolayısıyla, üç iş parçacığı da 16 numaralı satırı yazdırmalıdır.
Değil mi?
Çünkü her üç iş parçacığı da 14 numaralı satır olan bariyer noktasının ötesinde yürütmeye
devam edecekti.
Ve benzer şekilde, üçüncü bariyer noktasını 18 numaralı satıra yerleştirirdim.
Ve benzer şekilde, printf deyimini 20 numaralı satıra yerleştirirdim.
Bu iş parçacığı işlevi geri çağrısına bakarak, programı gerçekten çalıştırmadan önce beklenen çıktının ne olması gerektiğini
düşünebilir misiniz?
Bu yazdırma ifadelerinin konsolda hangi sırayla görünmesi gerektiğini düşünüyorsunuz?
Ben çözümümü uyguluyorum ve bu çıktıyı nasıl yorumladığınızı sizin analizinize bırakıyorum.
Bu çıktı doğrudur ve bunu açıklayabilmeniz gerekir.
Neden böyle bir çıktı görüyorsunuz?
Bu çıktı bir iş parçacığı bariyerinin işlevselliğini doğrular ve bu çıktı aynı zamanda iş parçacığı bariyeri uygulamamızın
doğru olduğunu da doğrular.
Bu ipliklerin görünme sırası, yani birinci iplik, ikinci iplik, üçüncü iplik önemli değildir.
Herhangi bir sıra olabilir.
Ne önemi var ki?
Üç ipliğin de önce ilk barikatı geçmesi gerekir.
Daha sonra üç iplik de ikinci barikatı geçmeli ve ardından üç iplik de üçüncü barikatı
geçmelidir.
Doğru.
Ancak, ipliğin barikattan çıkış sırası rastgele olabilir ve bunun bir önemi yoktur.
İlk barikatın iplik tarafından geçildiğini görebilirsiniz.
Bir, iki, üç.
Daha sonra ikinci barikat iki, bir, üç ve üçüncü barikat iplerden geçirilir.
Bir, iki, üç.
Doğru.
Böylece iş parçacığı bariyerimizin uygulaması tamamlanmış oldu.
Bu ders videosunun ardından iplik bariyeriyle ilgili birkaç soru ve bitirmeniz gereken
ödevler var.