Evet arkadaşlar, şimdi sıkı değişim kavramını tartışacağız.
Yani katı değişim hiçbir şey değildir, ancak iş parçacıklarının yürütülme modelidir.
Ve semaforları kullanarak sıkı değişimin uygulanmasını tartışacağız.
Bu nedenle, bir çift iş parçacığının sıkı bir dönüşümlü şekilde yürütülmesi pratik bir öneme sahiptir.
Doğru.
Bu yüzden iplik çifti kelimesine dikkat edin.
Bu sorun yalnızca iki iş parçacığı için geçerlidir.
Değil mi?
Yazılım dünyasında iki iş parçacığı arasında bu yürütme modelini uygulamak nadir değildir
ve iş parçacığı senkronizasyonu tartışmasında katı Dönüşümün özel bir yer bulmasının
nedeni budur.
Yani resimde T1 iş parçacığına sahip olduğumuzu ve t1 iş parçacığı yürütüldüğünde ve W1 diyelim iş yaptığında bir t2 iş
parçacığımız olduğunu görebilirsiniz.
T2 iş parçacığı engellenmiş durumdadır ve T1 iş parçacığı W1 işini bitirdiğinde engellenir ve yürütmeye
devam eden ve W2 miktarda işi doğru yapan t2 iş parçacığıdır.
Daha sonra t2 iş parçacığı bu noktada kendini bloke eder ve t1 iş parçacığı yürütmeye devam eder ve W3
miktarında iş yapar ve bu döngü sonsuza kadar tekrar eder.
Değil mi?
Bu diyagramdan da görebileceğiniz gibi, belirli bir zamanda yalnızca bir iş parçacığı yürütülüyor, değil mi?
Buradaki diğer bir zorluk ise, bir iş parçacığı yürütmeyi bitirdiğinde, yürütmeye devam etmesi için diğer
iş parçacığına nasıl iletileceğidir.
Doğru.
Ve diğer iş parçacığı işini bitirdiğinde, o zaman diğer iş parçacığı resmi iş parçacığına işimi bitirdim,
yürütmenize devam edebilirsiniz mesajını nasıl iletecektir.
Değil mi?
Bu nedenle, iş parçacıklarının katı dönüşümlü bir şekilde yürütülebileceği semaforları kullanarak şemayı uygulamamız
gerekir.
Doğru.
Bu yüzden semafor kavramını kullanacağız ve daha spesifik olarak bu problemin çözümünü uygulamak
için sıfır semafor kullanacağımızı söyleyeceğiz.
Şimdi soru sıfır semaforların ne olduğudur, sıfır, semaforlar hiçbir şey değildir,
ancak izin sayacı değeri sıfır olarak başlatılan semaforlardır.
Doğru.
Peki semaforla ilgili özel şey nedir?
Özel olan şey, böyle bir semaforun başlatılmasından hemen sonra, bir iş parçacığı böyle bir semafor üzerinde
bazı ağırlık API'lerini çağırırsa, çağıran iş parçacığının hemen engellenmesidir.
Değil mi?
Çünkü izin sayacının değeri 0'dan -1'e gidecektir.
Semaforun kurallarına göre, çağıran iş parçacığı engellenir.
Doğru.
Öte yandan, iş parçacığı sıfır semafor üzerinde bir post işlemi gerçekleştirdiğinde,
izin sayacı değeri -1'den 0'a yükselecektir.
Ve bu semafor üzerinde bloke olan iş parçacığı yürütmeye devam edecektir.
Doğru.
Böylece sıfır semaforun bize iş parçacığını engellemenin ve iş parçacığına sinyal göndermenin en basit yolunu sunduğunu görebilirsiniz.
Doğru.
t1 iş parçacığı yürütülüyorsa ve yürütme akışının bir noktasında ise.
T1 iş parçacığının sıfır semafor üzerinde bir API çağırdığını varsayalım.
O zaman T1 iş parçacığı bu noktada engellenecektir.
Doğru.
Ve sistemdeki başka bir iş parçacığı basitçe bazı posta API'lerini çağırırsa.
Aynı semaforda.
Ardından T1 iş parçacığı yürütmeye devam eder.
Doğru.
Yani sıfır semaforlar bu şekilde çalışır.
Şimdi de katı değişime dayalı bir problemi çözelim.
Diyelim ki elinizde şu problem cümlesi var.
T1 ve t2 olmak üzere iki iş parçacığı oluşturan bir program yazın, t1 iş parçacığı 1 ile 15 arasındaki tek sayıları yazdırırken,
t2 iş parçacığı 2 ile 15 arasındaki çift sayıları yazdırır ve ekranda görmeniz gereken çıktı sıralı
olmalıdır.
Yani, çıktı bir, iki, üç, dörtten 15'e kadar olmalıdır.
Doğru.
Bu yüzden çıktınız kesinlikle sıralı olmalıdır.
Dolayısıyla bu sorunun çözümü, T1 ve T2 iş parçacığını katı bir alternatif şekilde yürütecek
şekilde senkronize etmeniz gerektiğidir.
Değil mi?
Bu yüzden videoyu duraklatmanızı ve kendi başınıza bir çözüm denemeye çalışmanızı rica ediyorum, çünkü şimdi
bu sorunun çözümünü tartışacağım.
Bu nedenle lütfen videoyu durdurun ve ilerlemeden önce çözüm hakkında düşünün.
Şimdi bu sorunun çözümünü tartışacağım, böylece çözümün oldukça basit ve anlaşılır
olduğunu görebilirsiniz.
İki semafor kullanmanız gerekir ve her iki semafor da sıfır semafordur.
Değil mi?
Dolayısıyla bu çözüm iki sıfır semafor almanızı gerektirir.
Şimdi t bir ve t iki iş parçacığının bu uygulamasını gözden geçirmeyi ve bu programın 15'e kadar bir, iki, üç, dört,
beş çıktılarını yazdırıp yazdırmayacağını doğrulamayı size bırakıyorum.
Ve eğer bu kod parçasının gerçekten doğru çözümü verdiğini düşünüyorsanız, o zaman bu çözümü veya bu kod
parçasını bir kez daha düşünmenizi tavsiye ederim.
Bir de sıfır semaforun bu sorunu neden bu kadar zarif bir şekilde çözebildiğini düşünün.
Bunu sormamın nedeni, bu kursun SQL bölümünde katı dönüşümün bir alt kümesini uygulamak ve pratikte
sıfır semaforların belirli iş parçacığı senkronizasyon sorunlarını çözmemize nasıl yardımcı olduğunu görmek için sıfır
kuvvet kullanacak olmamızdır.