Evet, çocuklar, şimdi şu ana kadar ne yaptığımızı anlamaya çalışalım.
Böylece bir ağ tarafından öğrenilen yönlendirme tablosundaki her bir girdiye bir zamanlayıcı bağladık.
Tamam.
Ve.
Her yönlendirme tablosu için zamanlayıcı.
Entry ayrı bir iş parçacığı bağlamında çalışır, bu nedenle basitçe şu anlama gelir.
Yönlendirme tablonuzun rotaların bağlantı listesinden başka bir şey olmadığını varsayalım.
Yönlendirme tablosu girişlerimiz.
Ve yönlendirme tablonuzda dört rotanız olduğunu varsayalım Rota
bir, rota iki, Rota üç ve Rota dört.
Şimdi, zamanlayıcıların kullanılmaya başlanmasıyla birlikte, bu yönlendirme tablosundaki her bir yönlendirme tablosu
girişinin Zamanlayıcı İş Parçacığı adı verilen ayrı bir iş parçacığı vardır.
Diyelim ki bu bir zamanlayıcı ipliği T bir.
Bu yönlendirme tablosu girdisi, T iki zamanlayıcı iş parçacığı olan kendi iş parçacığına sahip olacaktır.
Bu yönlendirme tablosu girdisi ayrıca zamanlayıcı iş parçacığı, T üç ve benzeri olan kendi iş parçacığına sahip olacaktır.
Ve bu zamanlayıcı ipliklerinin her biri çalışıyor.
Ya da bu zamanlayıcı iş parçacıklarının her birinin aslında 30 saniye boyunca engellendiğini ve 30 saniye
geçer geçmez, bu zamanlayıcı iş parçacıklarının her birinin bu belirli geri arama işlevini çalıştıracağını söyleyebilirsiniz.
Tamam.
Bunun sonucunda her bir T1, T2, T3 ve T4 iş
parçacığı kendi yönlendirme tablosundan kendi girişini bağımsız olarak silmeye çalışacaktır.
Bu, tüm yönlendirme tablosunun aynı anda dört zamanlayıcı iş parçacığı tarafından işletildiği anlamına gelir.
İşte bu yüzden eşzamanlılığı getirdik.
Tamam.
Bu nedenle, programınız çökerse veya programınızın
yürütülmesinden beklenmedik bir sonuç görürseniz şaşırmayın.
Çünkü bu noktada programımız çok iş parçacıklı hale gelmiştir.
Ve sadece bu da değil, iplik güvensizdir.
Bu yönlendirme tablosunda kilit veya muteks korumamız yok, ancak birden fazla
zamanlayıcı iş parçacığı tarafından çalıştırılıyor, bu nedenle her şey ters gidebilir.
Projemizin adının STP, yani tek iş parçacıklı süreç olduğunu hatırlayın.
Bu da kısıtlamayı ihlal ettiğimiz anlamına gelir.
Programımız, STP veya uygulamamız mantıksal olarak artık tek iş parçacıklı bir uygulama değildir.
Şimdi çok iş parçacıklı hale geldi, bu yüzden
şimdi dinleyici iş parçacıklarına uyguladığımız çözümün aynısını uygulayacağız.
Şimdi aynı çözümü zamanlayıcı iş parçacıklarına uygulayacağız.
Dolayısıyla sorunun özü, her bir zamanlayıcı iş parçacığının kendi zamanlayıcı iş parçacığı
bağlamında yönlendirme tablosundan yönlendirme tablosu girişini silmeye çalışan bu işlevi çağırmasıdır.
Tamam.
Yani bu, bu işlevin güvenli olmayan bir şekilde birden fazla iş
parçacığı tarafından çağrıldığı anlamına gelir ve bu nedenle eşzamanlılığımız vardır.
Yani sadece bir satır kod değişikliği yaparak bu sorunu çözebiliriz.
Zamanlayıcıların devreye girmesi nedeniyle artık çok iş parçacıklı hale gelen STP sürecimiz.
Tekrar azaltılabilir veya tekrar mantıksal olarak tek iş parçacıklı süreç haline gelmek için tekrar onarılabilir.
Yani yapacağımız şey, bu zamanlayıcı iş parçacıklarının her biri
ateşlendiğinde, yönlendirme tablosu girişini kendileri silmek yerine, yönlendirme tablosu
girişinin silinme işlemini olay döngüsü iş parçacığına devretmek olacaktır.
Dolayısıyla, bu iş parçacıklarının her biri tarafından yapılacak iş miktarını kabul edecek
olan olay döngüsü iş parçacığıdır ve daha sonra olay döngüsü iş
parçacıkları bu yönlendirme tablosu girişlerinin her birinin silinmesini tek tek işleyecektir.
Bu da STP sürecinizin artık mantıksal olarak tek iş parçacıklı hale geldiği anlamına gelir.
Yine, bu girdilerin her birinin yönlendirme tablosundan silinmesi artık zamanlayıcı
iş parçacıkları yerine olay döngüsü iş parçacığı tarafından yapılacaktır.
Dolayısıyla, bu zamanlayıcı iş parçacıklarının her biri silme işlemini
kendi başlarına gerçekleştirmek yerine olay döngüsü iş parçacığına devredecektir.
Bu yüzden uygulamamız gereken kod değişiklikleri var.
Bu çözüm sadece bir satır koddan ibarettir.
Bu yüzden yapacağım şey, bu çağrıyı kaldırmak ve zamanlayıcının süresinin dolmasına izin vermek olacak.
İşte o zaman zamanlayıcı iş parçacığı ateşlenir.
Hesaplamayı olay döngüsü iş parçacığına devretmelerine ve zamanlayıcı iş
parçacığının uygulamanın hesaplamasını kendi başına yapmamasına izin verin.
Aksi takdirde eşzamanlılık ortaya çıkacaktır ve bu da sorunumuzun çözümüdür.
Tamam.
Yani bu dosyada hash include yapmanız gerekir.
STP dot h başlık dosyası.
Şimdi, bu programı derleyip tekrar çalıştırırsanız, aynı sonucu göreceksiniz.
Yani, tüm yönlendirme tablosu girdileri ilgili zamanlayıcılarının sona ermesi üzerine silinecektir.
Ancak dahili olarak yönlendirme tablosu girdilerinin silinmesinin artık
olay döngüsü iş parçacığı tarafından yapıldığını biliyoruz.
Tüm ilgili zamanlayıcı iş parçacıkları hesaplamalarını olay döngüsü iş parçacığına devretmiştir.
Tamam.
Yani bu, işleminizin temel uygulama mantığının tek bir iş parçacığı tarafından
yürütüldüğü anlamına gelir ve bu da olay döngüsü iş parçacığıdır.
Ve tebrikler.
STP süreciniz mantıksal olarak hala tek iş parçacıklı bir süreçtir.