Şimdi STP sürecimizde silme görevini
erken silme gerçekleşmeyecek şekilde uygulayalım.
Bu yüzden iki senaryoyu ele alacağız.
İlk senaryoda, yönlendirme tablosu girdisinden başka bir
şey olmayan tek bir nesneyi sileceğiz.
Yani STP sürecinden silmemiz gereken sadece tek bir nesne.
İkinci senaryoda ise tüm yönlendirme tablosunu silmek
için nasıl eşzamansız kod yazacağımızı uygulayacağız.
İlk olarak dört numaralı seçeneğe gelelim.
Tek bir yönlendirme tablosu girişinin silinmesiyle
ilgilenen dört numaralı seçeneği zaten uyguladık.
Şimdi tek yapmamız gereken erken silme işleminin gerçekleşmemesine dikkat etmek.
Bu yüzden sdp nokta c dosyasına gireceğim.
Ve Sdpc'de burada işleyici için bir seçenek numaramız var.
Ve bunu görebilirsiniz.
LCP yönlendirme tablosunu güncelle işlevini çağırıyorum.
Tamam.
Bu yüzden yönlendirme tablosu girişini silmek için ls tp update routing table fonksiyonunu çağırıyorum.
Ve bu işlev stp lc dosyasında uygulanmaktadır.
Bu fonksiyonu aramama izin verin.
İşte burada.
İşte bu fonksiyon.
Tamam.
Şimdi komut koduna bağlı olarak, bu komut kodunun oluştur, güncelle veya sil olabileceğini görebilirsiniz.
Şimdi buraya, komut kodu yönlendirme tablosu girişini silmek içinse bu işin düşük
öncelikli bir iş olarak oluşturulması gerektiğine dair ek bir kod koymam gerekiyor.
Yapmanız gereken tek değişiklik bu,
değil mi? Ve işimiz bitti.
Dolayısıyla, komut kodu silme ise, düşük öncelikli bir görev oluşturmanız gerekir.
Aksi takdirde, her zamanki gibi orta öncelikli bir görevden vazgeçebilirsiniz.
Ve olay döngüsü iş parçacığı tarafından çağrılacak olan geri arama işlevinde.
Yönlendirme tablosu girişini yönlendirme tablosundan silen bir fonksiyon zaten yazmıştık.
Ve tüm kaynakları serbest bırakıyoruz.
Tamam.
Yani sonuçta görev tamamlandığında IL finish'e geri dönüyoruz.
Böylece yönlendirme tablosu girdisini silme işlemimiz, erken silme gerçekleşmeyecek şekilde uygulanır.
Yönlendirme tablosu girişinin silinmesi söz konusu olduğunda görevi düşük
öncelikli bir görev olarak zamanladığımız için erken silme gerçekleşmeyecektir.
Dolayısıyla bu hususlar zaten uygulanmaktadır.
Silinmesi gereken bir yönlendirme tablosu girdisi verildiğinde, yönlendirme
tablosu girdisine gelen herhangi bir işaretçimiz olmamalıdır.
Bir yönlendirme tablosu girdisini temsil eden bir D nesnesini sildiğinizi varsayalım.
Bu veri nesnesi D'ye işaret eden gelen işaretçileri kırana
kadar bu veri yapısı D üzerinde free çağrısı yapmamalısınız.
Diyelim ki uygulamanızda başka p1, p2, p3 nesneleriniz var
ve bu nesneler D veri nesnesine bir işaretçi tutuyor.
Dolayısıyla, bu işaretçileri kırmadan D veri nesnesini serbest
bırakırsanız, bu işaretçiler sarkan işaretçiler haline gelecektir.
Bu da uygulamanızın bellek durumunun bozulacağı anlamına gelir.
Yani bunun asenkron programlama ile hiçbir ilgisi yoktur.
D nesnesini silmeye karar verdiyseniz, uygulamanızdaki başka herhangi bir
veri nesnesinin silinen nesnenin işaretçisini tutmaması gerektiğinden emin olun.
RSVP sürecinde bu geçerli değildir çünkü P1, P2 veya P3'ü taklit
eden herhangi bir veri nesnemiz yoktur, ancak izlemeniz gereken kılavuz budur.
Yönlendirme tablosu girişini konteyner veri yapısından ayırın.
İşte.
Konteyner veri yapısı yönlendirme tablosu anlamına gelir.
Bu nedenle, yönlendirme tablosu ağaçları, ikili arama ağaçları, grafikler, hash haritaları, hash
tabloları vb. gibi düğümlerin koleksiyonu olan veri yapılarına konteyner veri yapıları denir.
Bir yönlendirme tablosu girdisini sildiğiniz için, bu yönlendirme
tablosu girdisini yönlendirme tablosundan ayırmanız gerektiği açıktır.
Yönlendirme tablomuz hiçbir şey değildir, ancak çift bağlantılı bir listedir.
Dolayısıyla, bu yönlendirme tablosu girişini silmeye karar verdiyseniz, bu
yönlendirme tablosu girişini bağlı listenin geri kalanından ayırmanız gerekir.
Açıkçası, her zamanki gibi çift bağlı listeden bir
düğüm sildiğinizde yaptığınız gibi işaretçileri ayarlamanız gerekir.
Yani bir bakıma, bu veri yapısını D yapmanız ve veri yapısını veya veri nesnesini izole etmeniz gerekir.
Şimdi, ikinci adımda, bu veri nesnesi tarafından
işgal edilen tüm kaynakları serbest bırakmanız gerekir.
D.
Bizim durumumuzda, D nesnesi tarafından tutulan tek kaynak zamanlayıcıya bir işaretçiden başka bir şey değildir.
Böylece kodda, yönlendirme tablosu girişini silmeye karar verdiğimizde, zamanlayıcısının çalışıp
çalışmadığını kontrol ettiğimizi ve çalışıyorsa zamanlayıcıyı iptal ettiğimizi görebilirsiniz.
Sanırım bu mantık r t nokta c dosyasında uygulanıyor.
Art table delete adında bir işleviniz var.
R2 R2 girişini silin ve burada son kullanma zamanlayıcısını
kontrol ettiğinizi ve zamanlayıcıyı iptal ettiğinizi veya sildiğinizi görebilirsiniz.
Yani temel olarak bu adım, silmekte olduğunuz
veri nesnesi tarafından kullanılan kaynakları silmeye eşdeğerdir.
Yine bu genel bir kılavuzdur.
Asenkron programlama ile hiçbir ilgisi yoktur.
Ve son olarak veri nesnesini serbest bırakır ve ilfenesh'i döndürürsünüz.
Tamam.
Sdpl dot c dosyasında zaten yaptığımız şey budur.
İşte.
Komut koduna bağlı olarak, yönlendirme tablosu girişini yönlendirme tablosundan sileriz
ve gerekli tüm belleği boşaltırız ve EOL bitişini döndürürüz.
Böylece dört numaralı seçeneğin uygulanması tamamlanmış oldu.
Ve artık yönlendirme tablosu girişinin silinmesi erken silme sorunundan tamamen arındırılmıştır.
Şimdi bir sonraki ders videosunda tüm konteyner
veri yapısının silinmesini nasıl uygulayacağımızı tartışalım.
Bu durumda yönlendirme tablosu.