Şimdi ağırlık ve sinyal konusundaki tartışmamızı bir analoji tartışması ile tamamlayalım.
Dolayısıyla bu benzetme, daha gelişmiş ağırlık ve sinyal kullanımlarını içeren çözümleri kodlarken koşul değişkeni
ve muteksin birlikte nasıl kullanılacağını anlamanıza yardımcı olacaktır.
Dolayısıyla, gerçek dünya senaryolarından birini tanımlayan problem cümlesi şudur.
Yani sorun ifadesi hem sizi hem de arkadaşınızı kapsıyor, değil mi?
Ve diyelim ki ikiniz de bir oyun oynuyorsunuz.
Diyelim ki bu problemde bir kutumuz var ve bu kutuda bazı şekerler var, değil mi?
Kutu başlangıçta kilitlidir ve o kutunun tam olarak bir anahtarı vardır, değil mi?
Çift anahtar yoktur.
Kutunun kilidinin açılabileceği ve kutunun içindeki içeriğe erişilebileceği tam olarak bir anahtar vardır.
Peki sizin buradaki rolünüz nedir?
Anahtarı kullanarak kutunun kilidini açmanız ve bir şeker çıkarmanız gerekiyor.
Doğru.
Arkadaşınızın rolü ise, arkadaşınızın da aynı anahtarı kullanarak kutunun kilidini
açması ve kutunun içine bir şeker koymasıdır.
Doğru.
Böylece sizin tüketici iş parçacığı rolünü oynadığınızı, arkadaşınızın ise üretici iş parçacığı rolünü
oynadığını ve bir kısıtlama olduğunu görebilirsiniz.
Ve bu kısıtlama oldukça açıktır ki sadece anahtarı olan kişi kutuyu kilitleyebilir ve kilidini açabilir.
Değil mi?
Kutunun anahtarını almadığın sürece, sen sadece.
Sadece kutuyu kilitleyemez veya kilidini açamazsınız.
Değil mi?
Umarım sorun ifadesi açıktır.
Bu tipik bir üretici tüketici problemidir ve önceki ders videolarında tartıştığımız S bir
ile S dokuz arasındaki aynı adımları tartışacağız.
Ve bu analojide bu adımların her birinin gerçek dünyayla ilgisini anlamaya çalışacağız.
Doğru.
Yani bu, Y'nin tüketici ve F'nin üretici olduğu tipik bir üretici tüketici senaryosudur.
Yani ileriye dönük olarak, ekran iki bölüme ayrılmıştır.
Sol tarafa Y adımlarını yazacağız ve sağ tarafa da bir arkadaşımızın
attığı adımları yazacağız.
Başlangıç olarak, başlangıçta kutuya erişimi olanın Y yani siz olduğunu varsayalım.
Yani, anahtarı olan sizsiniz.
Yani bir anahtara sahip olmak, bir kutunun muteksine kilitlendiğiniz anlamına gelir, değil mi?
Yani S1 numaralı adım, kutunun anahtarına sahip olmanıza benzer.
Ve kutunun anahtarı sizde olduğuna göre, kutunun kilidini pekâlâ açabilirsiniz.
Değil mi?
Ardından S2 numaralı adım, yüklemi kontrol edin der.
Şimdi kutunun kilidini açtığınıza göre, kutunun içindekileri çok iyi görebilir ve kutu
zaten boşsa, elbette yapacak bir şeyiniz olmadığını ve kendinizi engelleyeceğinizi kontrol edebilirsiniz, değil
mi?
Şimdi, burada üçüncü adımda, yalnızca koşul değişkenini kullanarak kendinizi engellemekle kalmıyor, aynı
zamanda kutunun anahtarını da serbest bırakıyorsunuz.
Bu p iplik koşulunu zaten yeterince tartışmıştık.
Bekle.
API iki şey yapar.
İş parçacığını bloke eder ve ikinci argüman olarak aktarılan muteksin kilidini açar.
Doğru.
Şimdi bunu anlıyorsunuz.
Neden p iplik durumu?
Bekle, muteks üzerindeki kilidi serbest bırak.
Dördüncü adım, yapacak bir şeyiniz olmadığı için sadece kendinizi bloke etmekle kalmayıp, aynı zamanda f
olan başka bir adamın kutuya erişmesine ve içine bir şeker yerleştirmesine izin vermeniz gerektiğini söylüyor.
Böylece F sadece ilk etapta içine bir şeker yerleştirebilecektir.
Kutunun anahtarını bıraktınız, değil mi?
Buradan itibaren kontrol beş numaralı adıma geçer.
Bu altıncı adım.
Şimdi, üçüncü adımdan beri muteks kullanılabilir durumda.
Böylece arkadaşınız kutunun anahtarını ele geçirebilir.
Doğru.
Ve anahtarı olduğu için kutunun kilidini açabilir.
Yedinci adımda ise kutunun içine bir şeker yerleştirebilir.
Doğru.
Artık arkadaşınız kutunun içine başarıyla bir şeker yerleştirdiğine göre, size şunu bildirebilir: hey, kutunun
içine bir şeker yerleştirdim.
Ve bunun için arkadaşınız size bir bildirim veya sinyal gönderir.
Doğru.
Yani sekiz numaralı adım tamamen uygulandıktan sonra.
Size bir sinyal gönderilir.
Yani bu adımda, F'nin kutuyla işinin bittiğine dair bildirim aldınız, ancak ara bir durumdasınız.
Yani, kutunun içeriğine erişmek istiyorsunuz, ancak bunu yapamıyorsunuz çünkü F henüz kutunun anahtarını
serbest bırakmadı.
Değil mi?
Yani arkadaşınızın kutunun anahtarını serbest bıraktığı dokuz numaralı adımdır ve bu nedenle
ancak dokuz numaralı adımdan sonra anahtarlara erişiminiz olur.
Yani on numaralı adım, bu muteks üzerinde tekrar bir kilit elde etmeye benzer.
Doğru.
Yani on numaralı adımda, bu muteks otomatik olarak perde arkasında kilitlenir, değil mi?
İş parçacığı blokajı kaldırdığında ve koşulun ötesinde yürütmeye devam ettiğinde.
Bekle API.
Bu muteks üzerindeki kilit otomatik olarak çalıştıran iş parçacığına verilir.
Doğru.
Yani yine on numaralı adımda, kutuya erişiminiz var.
Kutunun durumunu tekrar kontrol edeceksiniz, değil mi?
İş parçacığı uyandığında yüklemi tekrar kontrol etmesi gerektiğini zaten tartışmıştık.
Ve bu sefer kutuyu bulursanız, içine biraz şeker koyun.
Sonra şekeri kutudan çıkarır ve tüketirsiniz.
Bu S4 adım numarasıdır ve bu muteksin kilitli olduğunu unutmayın.
Bu nedenle, bu adımlar kritik bölüm olarak yürütülmektedir.
Değil mi?
Adım S4'te şekeri kutudan çıkardıktan sonra anahtarı tekrar kutuya bırakabilirsiniz.
Doğru.
Bu, S5 numaralı adımdadır.
Şimdi bu analojide y p iplik koşulunu anlıyorsunuz.
Bekle api.
Hem tehdidi engelleyecek hem de muteksin kilidini açacak şekilde uygulanır.
Kutuda bir şey bulamadığınızda, yapacak bir şeyiniz olmadığı için kendinizi bloke edersiniz
ve ayrıca arkadaşınıza kutuya erişim izni vermek istersiniz ve bu nedenle kutunun anahtarını serbest bırakmanız
gerekir.
Değil mi?
Dolayısıyla bu örnek, bu analoji bağlamında S1'den S9'a kadar tüm adımları açıkça açıklamaktadır.
Daha gelişmiş iş parçacığı senkronizasyon tekniklerini uygulayacağımız zaman, S1'den S9'a kadar olan
aşağıdaki adımları aklınızda tutmalısınız çünkü bu, iş parçacığı senkronizasyonuna dayalı problemleri kodlamanın oldukça standart
bir yoludur.
Aşağı yukarı mantıksal olarak, aynı adımları aynı sırayla uygulamanız gerekir, ancak problem
ifadesine bağlı olarak, programın yapısı farklı görünebilir, ancak programı analiz ederseniz,
S1'den S9'a kadar aynı adımları uygulayacaksınız.
Doğru.
Yemek filozofu problemini uygularken S1'den S9'a kadar aynı adımları
uygulayacağımızı göreceğiz.
Şimdi, yemek filozofu problemi kolayca üretici tüketici problemine ayrılabilir ve yemek filozofu
problemi uygulamasını tartışırken bu konuda daha fazla tartışacağız.