Evet arkadaşlar, bir önceki ders videosunda Master Slave one point C dosyasının uygulamasını
tartıştık ve şimdi bu dosyada iş parçacığı iptalini uygulayacağız.
Bu yüzden iş parçacığı iptalini uyguladıktan sonra, bu dosyayı master slave one async iptali olarak yeniden
adlandıracağım.
Dolayısıyla, asenkron iptal noktası C olan bu özel dosya çözümü içerir.
Şimdi bu dosyayı açalım ve iş parçacığı iptalini uygulayalım.
Umarım bu kısa dosyayı zaten incelemiş ve bu dosyanın yapısını ve amacını anlamışsınızdır.
Doğru.
Bu yüzden ekranı ikiye bölmeme izin verin.
Sol tarafta, kullanıcıyla etkileşime girdiğimiz bir while döngüsü var.
Sağ tarafta ise bir iş parçacığı işlevi olan bir işlevimiz var ve tüm bağımlı iş parçacıkları
bu işlevde çalışıyor.
Bir döngü boyunca.
Şu anda bu programın işlevselliğinin zaten farkındasınız, bu nedenle kullanıcı bir numaralı
seçeneği seçer seçmez sol tarafta görebilirsiniz.
Ayrıca kullanıcıya iptal etmek istediği iş parçacığına karşılık gelen iş parçacığı kimliğini de soruyoruz.
Değil mi?
Bu da demek oluyor ki burada ipliği iptal etmek için bir şey yapmam gerekiyor.
Thread numb olan bu değişken kimin kimliğidir.
Doğru.
Yani Posix api bir API iş parçacığı sağlar.
İş parçacığı iptali ve yapmanız gereken tek şey iptal etmek istediğiniz iş parçacığı tanıtıcısını iletmektir.
Doğru.
İşte bu kadar.
Doğru.
Böylece, iş parçacığı iptal çağrılır çağrılmaz, bu iş parçacığı tanıtıcısı tarafından tanımlanan iş parçacığına bir iptal
sinyali gönderileceğini görebilirsiniz.
Doğru.
Ancak bu programı derleyip şu anda çalıştırırsanız, bu satırı eklemenin herhangi bir etkisini
görmezsiniz, değil mi?
Bunun nedeni, iş parçacığını iptal etmek için iş parçacığının ilk etapta iptal edilebilir olması gerektiğidir.
Değil mi?
İptal edilebilir tehditler, bir tehdit oluşturduğunuzda varsayılan olarak doğrudan iptal edilebilen tehditlerdir.
Bunlar iptal edilebilir tehditler değildir.
Değil mi?
Ve iptal edilemeyen tehditler iptal edilemez.
Bu tehdide başvursanız bile API'yi iptal edin.
Yani dosya işlevinin içinde bir iş parçacığı bağlamında çalışan bir işlev vardır.
Ve iş parçacığı yürütülür yürütülmez, yapmamız gereken ilk şey bu iş parçacığını iptal edilebilir iş
parçacığı olarak işaretlemektir, böylece bu API'nin etkisi o iş parçacığı üzerinde gerçekleşir.
Dolayısıyla, iş parçacığı işlevinde yapmanız gereken tek şey, iş parçacığınız iş parçacığı işlevini yürütmeye başlar başlamaz,
iş parçacığının iptal edilebilir olup olmadığını belirtmeniz gerektiğidir.
Doğru.
Bunun için Posix standardı bize bir api p thread underscore set cancel state sunar.
Doğru.
Ve burada Posix başlık dosyalarında tanımlanan sabit bir değeri geçirmeniz gerekir ve sadece p thread cancel
enable'ı geçirmeniz gerekir.
Doğru.
Bu değerin diğer alternatifi p iş parçacığı iptal devre dışıdır.
Doğru.
Dolayısıyla, iş parçacığını iptal edilebilir olarak işaretlemek istiyorsanız, bu değişkeni veya bu sabiti geçirmeniz gerekir.
Ve bu iş parçacığını iptal edilemez olarak işaretlemek istiyorsanız, p iş parçacığı iptal devre dışı bırakmayı geçmeniz gerekir.
Doğru.
Dolayısıyla, yürütme sırasında, iş parçacığı herhangi bir zamanda iptal yeteneğine ilişkin davranışını
değiştirmek için bu API'yi çağırabilir.
Ve ikinci argümanı her zaman null olarak geçirebilirsiniz.
Bu hiç de önemli değil.
Ardından iptal modunu da ayarlamanız gerekir.
Böylece iki iptal modu olduğunu öğrenmiş olduk: ertelenmiş iptal ve eşzamansız
iptal.
Bu noktada asenkron iptal ile karşı karşıyayız.
Yani sadece pthread cancel veya asynchronous belirtmeniz gerekiyor, değil mi?
Ve bunu bir API Pthreads set cancel type kullanarak yapmanız gerekir, değil mi?
Dolayısıyla, bir iş parçacığının iptal yeteneği özelliğini değiştirmek için bu iki API'yi kullanmanız gerekir.
İlk API, bir iş parçacığının iptal edilebilir olup olmadığıdır ve ikinci API, iş parçacığınız iptal edilebilirse,
hangi modda iptal edilebilir olduğudur.
Eşzamansız mı yoksa ertelenmiş mi?
Kısa bir süre sonra ipliğin ertelenmiş iptal modunu tartışacağız.
Yani artık bu fonksiyonu çalıştıran iş parçacığı eşzamansız modda iptal edilebilir.
Burada dikkat edilmesi gereken bir diğer husus da bu API'lerin iş parçacığı tanıtıcısını argüman olarak almamasıdır, değil mi?
Yani bu basitçe, hangi iş parçacığı bu API'yi çağırırsa, bu API'nin etkisinin yalnızca o iş parçacığı üzerinde gerçekleşeceği
anlamına gelir.
Doğru.
Dolayısıyla, bir iş parçacığının diğer iş parçacığını iptal edilebilir veya iptal edilemez olarak işaretlemesi mümkün değildir.
Doğru.
Süreçteki bir iş parçacığı, süreçteki diğer iş parçacığının iptal yeteneği davranışını değiştiremez.
Doğru.
Bu API'lerin iş parçacığı tanıtıcısını bir argüman olarak alması mümkün olabilirdi.
Doğru.
Çünkü bir iş parçacığı, diğer iş parçacıkları üzerinde işlem yapmak için her zaman diğer iş parçacığının iş parçacığı tanıtıcısını
geçirebilir.
Ancak burada durum böyle değil.
Bu nedenle gelecekte iş parçacığı tanıtıcısını kabul etmeyen herhangi bir Posix API'si görürseniz, bu API'nin
etkisinin çağıran iş parçacığı üzerinde gerçekleşeceği anlamına gelir.
Şimdi programımızı derleyip çalıştıralım ve iş parçacığı iptalinin nasıl çalıştığını görelim.
Çocuklar, size demoyu göstermek için.
Şimdi programımızı ilk pencerede çalıştıralım.
Değil mi?
Ve tabii ki bağımlı iş parçacıkları çalışmaya başlamış olmalıdır.
Şimdi thread zero dot txt dosyasının içeriğini görüntüleyeyim ve sıfır numaralı slave thread'in bu dosyaya
yazdığını görebilirsiniz.
Benzer şekilde, bir numaralı iş parçacığı üçüncü pencereye yazarken iki numaralı iş parçacığı dördüncü pencereye
yazmaktadır.
Doğru.
Şimdi konuyu iptal edeyim ve diyelim ki iki numaralı konuyu seçtim.
Yani bu basitçe iki numaralı başlığın iptal edildiği anlamına geliyor, değil mi?
İçeriğini dosyaya yazmayı durdurdu.
Ve başka bir konu seçmeme izin verin.
Diyelim ki bir numaralı ipliği iptal etmek istiyorum.
Doğru.
Böylece bir numaralı konunun iptal edildiğini ve konu iptal edildikten sonra konuya devam edemeyeceğinizi
görebilirsiniz.
Hiçbir yolu yok.
Yapabileceğiniz tek şey, tamamen sıfırdan yeniden bir iş parçacığı oluşturmaktır.
İptal ipliğinizin yaptığı işi yeniden yapmak istiyorsanız.