Evet arkadaşlar, şimdi yeniden yazma kilidi işlevselliğini test edeceğimiz bir örnek program yazdım.
Tamam.
Yani son bir sınavım var, altını çizdiğim bir çalışma Nokta gördün mü?
Bu yüzden yapacağım şey, ortak bir kritik bölüm oluşturmak ve bu kritik bölüme
üç küçük kabile ve üç yazar dizisi yerleştirmeye çalışmak olacaktı.
Elbette, bu kritik bölüm bir yeniden yazma günlüğü ile korunmaktadır.
Ve benim gözlemim, kritik bölümde birden fazla okuyucu izi yürütüldüğünde, anlatıcı iş parçacığının
kritik bölümde yürütülmesi ve bir yazar tuzağının kritik bölümde yürütülmesi gerektiği yönünde olmalıdır.
Kritik bölümde başka hiçbir okuyucu iş parçacığı veya yazıcı iş parçacığı çalışmamalıdır.
Bu benim gözlemim olmalı.
Test programım bu davranışı gösterebilirse, okuma yazma günlüklerinin işlevselliğini doğrulayabiliriz.
Yani örnek test programı bu şekilde yapılandırılmıştır.
İzin verin sizi bu kısa programa götüreyim.
Dolayısıyla, yürütme ortalamadan başladığından, yaptığım şey öncelikle bu altı iş parçacığından
altı iş parçacığını almak oldu.
İlk üç iş parçacığı okuma tuzakları, son üç iş parçacığı ise boşta kalma tuzaklarıdır.
Tamam.
Ve bu okunan sağ kilitli nesneyi global bir değişken olarak aldım.
Burada global bir değişken görüyorsunuz ve ana fonksiyonda bu root right log nesnesini
başlatıyorum.
Bu yeni metnin açıklamasına daha sonra geleceğim ve altı konuyu da başlatıyorum.
Tamam.
İlk üç iş parçacığının aslında sonsuz döngüde kırmızı iş parçacığı işlevini yürüttüğünü ve küçük üç
iş parçacığının gidip sağ iş parçacığı işlevini ve sonsuz döngüyü yürüteceğini görebilirsiniz.
Yani bu iki fonksiyon burada.
Bu doğru iplik işlevidir.
Bu bir yönlendirme işlevidir.
Gördüğünüz gibi konu başlıklarımı iki gruba ayırdım.
İlk iş parçacığı kümesi okuma iş parçacığı işlevini yürütür ve sonraki iş parçacığı grupları sağ
iş parçacığı işlevini yürütür.
Şimdi bu iki fonksiyonun uygulanmasını tartışalım.
Bu iki fonksiyonun uygulanması oldukça benzer ve basittir.
Gördüğünüz gibi, bu okuma iş parçacığı işlevi sonsuz bir döngü içinde yürütülür.
Ve iş parçacığı kritik bölüme girer girmez, 71'den 75'e kadar vurgulanan satır numarası
kritik bölümü temsil eder ve okuma yazma kilidi nesnesinin okuma günlüğü tarafından korunur.
Dolayısıyla, 71 numaralı satırdan 75 numaralı satıra kadar olan satır, tüm okuyucu sekmeleri tarafından
aynı anda erişilecek olan kritik bir bölümdür, oysa sağ iş parçacığı işlevinde kritik bölüm 85 numaralı
satırdan 89 numaralı satıra kadar değişir.
Ve bu kritik bölüm sağ kilit tarafından korunduğundan, eşzamanlı üç sağ iş parçacığından yalnızca
bir iş parçacığı herhangi bir zamanda bu kritik bölümün vurgulanan kısmını yürütecektir.
Ayrıca, bu okuyucu kritik bölüme gir ve okuyucu kritik bölümden çık işlevlerini kullanarak okuyucu
kritik bölüme gir ve okuyucu kritik bölümden çık gibi bazı işlev çağrıları yerleştirdiğimi de fark edebilirsiniz.
Aslında takip ediyorum.
Kritik bölümde kaç okuyucunun çalıştığıyla ilgili olarak, okuyucu kritik bölüme girdiğinde,
bu tamsayı değişkenini artırıyorum.
Ve okuyucu kritik bölümden ayrıldığında, bu Intisar kullanılabilirliğini azaltıyorum, böylece bir alt
çizgi kritik bölümde kaç okuyucunun gerçekten yürütüldüğünü gösteriyor.
Ve ne zaman değerini güncellemem gerekirse.
Ve alt çizgi, bunu muteks kilidi koruması altında yapmam gerekiyor.
Nedeni basit çünkü kritik bölümü çalıştıran birden fazla iş parçacığı var ve birden fazla
okuyucu tuzağı tarafından çalıştırılan kritik bölüm içindeki herhangi bir tamsayı değerini güncelleyemiyorum.
Sadece baskın operasyonları yapmam gerekiyordu ama işte buradayım.
Daha sonra güncelleme yapılabilir.
Bu nedenle, doğru işlemi gerçekleştiriyorum ve bu nedenle gerçekleştirebilmem için ekstra muteks korumasına
ihtiyacım var.
Bu alt çizginin güncellenmesi değişken değerimizdir.
Güvenilir bir alt çizgi için durum böyle değilken, DeBlois yenilebilir kritik bölümü yürüten tüfek
tuzaklarının sayısını sayar.
Bu yüzden tüfek tehdidi kritik bölüme girer girmez API yazarını ve kritik bölümü çağırıyorum.
Ve yazar iş parçacığı kritik bölümden ayrılır ayrılmaz, sağa veya kritik bölümden ayrıl API'sini çağırıyorum.
Ve bu API'nin uygulanması oldukça basittir.
Yeniden yazma kilidi nesnesi otomatik olarak kritik bölümün bu vurgulanan kısmının bir seferde en fazla bir
iş parçacığı tarafından yürütülmesini sağlayacaktır.
Bu nedenle, N değerini güncellemeye gerek yoktur. W. değişkeni ekstra muteks koruması altında.
Tamam.
Ve son olarak, CSS'yi yürüten işlev olan temel bir kritik bölümümüz var.
Ve bu fonksiyonda, kritik bölümde kaç okuyucu iş parçacığı ve kaç yazar iş parçacığı yürütüldüğünü yazdırmaya
çalışıyorum.
Ve bunu aşırı kodeks koruması altında basacağım.
Tamam.
Çünkü bu işlev birden fazla eş zamanlı okuyucu iş parçacığı tarafından yürütülecektir.
Dolayısıyla, bu değişkenlerin değerini okuyabilmem ve çıktı alabilmem için ekstra bir muteks korumasına
ihtiyacım var.
Sahne arkasındaki baskının tamponda doğru işlemi gerçekleştirdiğini her zaman unutmayın.
Birden fazla kırsal teröristin faaliyet gösterdiği kritik bölümde, ekstra meyerriecks koruması olmadan
sadece PRINTF kullanamazsınız.
Tamam.
Bu nedenle, programlarınızda hata ayıklama yaparken, birden fazla iş parçacığına izin verilen belirli kritik bölümlerde
hata ayıklıyorsanız ve çevrimiçi ekstra muteks koruması olmadan bu kritik bölümlerde kullanamazsanız, buna
dikkat edin.
Aksi takdirde, ekranda bazı çöp baskılar veya çıktılar görürsünüz.
Dolayısıyla bu program çıktı olarak bu satırları üretecektir.
Yani bu programda genel olarak yaptığım şey, doğru iz kritik bölüme girdiğinde veya gerçek tehdit
kritik bölüme girdiğinde veya çıktığında, bunları ve maviyi veya başka bir giyilebilir cihazı güncelliyorum.
Tamam.
Ve tehdit sonunda kritik bölümü idam ettiğinde, o zaman ben kritik bölümü değil sanayi öncesini
seçtim.
Okuyucu tehditlerini ve kritik bölümün güvenliğini sağlamaya yönelik doğru saldırıları eve yazdırarak, bu tüm
programdır.
Şimdi bu programı çalıştırırsanız.
Şimdi programı derleyeyim ve çalıştırayım.
Böylece çalıştırılabilir dosyanın adı tükenir.
Ve eğer bu programı çalıştırırsam, o zaman bunun gibi bir çıktı verecektir, bu sizin için çok anlamlı olmayabilir,
bu yüzden bu programın çıktısını geçici bir dosyaya yazmamız ve programınızın beş saniye kadar çalışmasına
izin vermemiz gerekecek, sonra sadece kontrole basın ve görün.
Ve şimdi bu -- dosyasına yazılan çıktıyı değerlendireceğiz veya inceleyeceğiz.
Bu yüzden kritik bölümde çalışan okuyucu iş parçacıklarının sayısının sıfır olduğu satırları seçmeme
izin verin.
Kritik bölümde yürütülen bir dizi sert eğilim de bunlardan biridir.
Ve saymama izin verin, WC tire al kullanarak bu tür kaç satır var.
Yani bu kadar çok sayıda satır yapılır.
Bu, kritik bölümde 10 kez doğru alternatifin tek başına çalıştığı ve kritik bölümde çalışan bir alternatif
olduğu anlamına gelir.
Yani bu oldukça geçerli bir senaryo.
Şimdi şunu söyleyeyim, eğer kritik bölümde yürütülen doğru başlangıçların sayısı gerekiyorsa, bu tür satırların
sayısı sıfır olmalıdır.
Pekala, çünkü sağa doğru yetkililerin kritik bölüme girmesine izin verilmez ve üç sağ
yetkilinin de kritik bölüme girmesine izin verilmez.
Dolayısıyla, Azeroth yazarlarının sayısı ve kritik bölümde yürütülen bölgesel tehditlerin
sayısı bir olabileceği gibi iki de olabilir.
Üç olabilir.
Tamam.
Ancak kritik bölümde çalışan herhangi bir okuyucu tuzağı varsa, kritik bölümlerde yazar denemelerinden
daha fazla sayıda yazar çalıştırılamaz, bu nedenle çıktı sıfır olmalıdır.
Böylece benim yaptığım gibi çeşitli sayıda okuyucu ve yazar kombinasyonlarını deneyebilir ve herhangi
bir zamanda kritik bölümde çalışan okuyucu ve yazar iş parçacıklarının okuma yazma günlükleri kurallarına
uyması gerektiğini doğrulayabilirsiniz.