WEBVTT

00:04.950 --> 00:09.630
Evet arkadaşlar, bir önceki ders videosunda Master Slave one point C dosyasının uygulamasını

00:09.630 --> 00:14.100
tartıştık ve şimdi bu dosyada iş parçacığı iptalini uygulayacağız.

00:14.100 --> 00:19.770
Bu yüzden iş parçacığı iptalini uyguladıktan sonra, bu dosyayı master slave one async iptali olarak yeniden

00:19.770 --> 00:21.060
adlandıracağım.

00:21.210 --> 00:27.360
Dolayısıyla, asenkron iptal noktası C olan bu özel dosya çözümü içerir.

00:27.360 --> 00:31.590
Şimdi bu dosyayı açalım ve iş parçacığı iptalini uygulayalım.

00:32.250 --> 00:39.290
Umarım bu kısa dosyayı zaten incelemiş ve bu dosyanın yapısını ve amacını anlamışsınızdır.

00:39.300 --> 00:39.900
Doğru.

00:40.530 --> 00:43.410
Bu yüzden ekranı ikiye bölmeme izin verin.

00:43.620 --> 00:48.570
Sol tarafta, kullanıcıyla etkileşime girdiğimiz bir while döngüsü var.

00:48.570 --> 00:54.360
Sağ tarafta ise bir iş parçacığı işlevi olan bir işlevimiz var ve tüm bağımlı iş parçacıkları

00:54.360 --> 00:55.920
bu işlevde çalışıyor.

00:55.950 --> 00:57.030
Bir döngü boyunca.

00:57.030 --> 01:04.110
Şu anda bu programın işlevselliğinin zaten farkındasınız, bu nedenle kullanıcı bir numaralı

01:04.110 --> 01:08.640
seçeneği seçer seçmez sol tarafta görebilirsiniz.

01:08.640 --> 01:15.840
Ayrıca kullanıcıya iptal etmek istediği iş parçacığına karşılık gelen iş parçacığı kimliğini de soruyoruz.

01:15.840 --> 01:16.470
Değil mi?

01:16.470 --> 01:21.000
Bu da demek oluyor ki burada ipliği iptal etmek için bir şey yapmam gerekiyor.

01:21.030 --> 01:24.390
Thread numb olan bu değişken kimin kimliğidir.

01:24.390 --> 01:25.110
Doğru.

01:25.110 --> 01:27.900
Yani Posix api bir API iş parçacığı sağlar.

01:28.410 --> 01:36.790
İş parçacığı iptali ve yapmanız gereken tek şey iptal etmek istediğiniz iş parçacığı tanıtıcısını iletmektir.

01:36.790 --> 01:37.690
Doğru.

01:38.710 --> 01:40.300
İşte bu kadar.

01:40.300 --> 01:41.050
Doğru.

01:41.050 --> 01:48.100
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

01:48.100 --> 01:51.010
sinyali gönderileceğini görebilirsiniz.

01:51.010 --> 01:51.820
Doğru.

01:51.820 --> 01:57.760
Ancak bu programı derleyip şu anda çalıştırırsanız, bu satırı eklemenin herhangi bir etkisini

01:57.760 --> 01:59.320
görmezsiniz, değil mi?

01:59.350 --> 02:07.000
Bunun nedeni, iş parçacığını iptal etmek için iş parçacığının ilk etapta iptal edilebilir olması gerektiğidir.

02:07.000 --> 02:07.720
Değil mi?

02:08.630 --> 02:14.270
İptal edilebilir tehditler, bir tehdit oluşturduğunuzda varsayılan olarak doğrudan iptal edilebilen tehditlerdir.

02:14.300 --> 02:16.150
Bunlar iptal edilebilir tehditler değildir.

02:16.160 --> 02:16.790
Değil mi?

02:16.790 --> 02:19.520
Ve iptal edilemeyen tehditler iptal edilemez.

02:19.520 --> 02:22.430
Bu tehdide başvursanız bile API'yi iptal edin.

02:22.460 --> 02:27.950
Yani dosya işlevinin içinde bir iş parçacığı bağlamında çalışan bir işlev vardır.

02:27.950 --> 02:34.370
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ş

02:34.370 --> 02:40.700
parçacığı olarak işaretlemektir, böylece bu API'nin etkisi o iş parçacığı üzerinde gerçekleşir.

02:41.630 --> 02:48.080
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,

02:48.080 --> 02:52.370
iş parçacığının iptal edilebilir olup olmadığını belirtmeniz gerektiğidir.

02:52.400 --> 02:53.100
Doğru.

02:53.120 --> 02:58.730
Bunun için Posix standardı bize bir api p thread underscore set cancel state sunar.

02:58.730 --> 02:59.420
Doğru.

02:59.420 --> 03:06.050
Ve burada Posix başlık dosyalarında tanımlanan sabit bir değeri geçirmeniz gerekir ve sadece p thread cancel

03:06.050 --> 03:08.400
enable'ı geçirmeniz gerekir.

03:08.400 --> 03:08.990
Doğru.

03:09.000 --> 03:12.780
Bu değerin diğer alternatifi p iş parçacığı iptal devre dışıdır.

03:12.810 --> 03:13.560
Doğru.

03:13.560 --> 03:19.560
Dolayısıyla, iş parçacığını iptal edilebilir olarak işaretlemek istiyorsanız, bu değişkeni veya bu sabiti geçirmeniz gerekir.

03:19.560 --> 03:26.070
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.

03:26.070 --> 03:26.760
Doğru.

03:27.060 --> 03:34.230
Dolayısıyla, yürütme sırasında, iş parçacığı herhangi bir zamanda iptal yeteneğine ilişkin davranışını

03:34.230 --> 03:37.980
değiştirmek için bu API'yi çağırabilir.

03:39.040 --> 03:41.620
Ve ikinci argümanı her zaman null olarak geçirebilirsiniz.

03:41.650 --> 03:43.520
Bu hiç de önemli değil.

03:43.540 --> 03:47.050
Ardından iptal modunu da ayarlamanız gerekir.

03:47.050 --> 03:51.820
Böylece iki iptal modu olduğunu öğrenmiş olduk: ertelenmiş iptal ve eşzamansız

03:51.820 --> 03:52.650
iptal.

03:52.660 --> 03:56.230
Bu noktada asenkron iptal ile karşı karşıyayız.

03:56.230 --> 04:01.090
Yani sadece pthread cancel veya asynchronous belirtmeniz gerekiyor, değil mi?

04:01.090 --> 04:06.100
Ve bunu bir API Pthreads set cancel type kullanarak yapmanız gerekir, değil mi?

04:06.100 --> 04:12.490
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.

04:12.580 --> 04:19.150
İlk API, bir iş parçacığının iptal edilebilir olup olmadığıdır ve ikinci API, iş parçacığınız iptal edilebilirse,

04:19.150 --> 04:22.450
hangi modda iptal edilebilir olduğudur.

04:22.450 --> 04:24.220
Eşzamansız mı yoksa ertelenmiş mi?

04:24.400 --> 04:28.540
Kısa bir süre sonra ipliğin ertelenmiş iptal modunu tartışacağız.

04:29.440 --> 04:35.470
Yani artık bu fonksiyonu çalıştıran iş parçacığı eşzamansız modda iptal edilebilir.

04:35.950 --> 04:43.580
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?

04:43.700 --> 04:50.360
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

04:50.360 --> 04:51.800
anlamına gelir.

04:51.800 --> 04:52.550
Doğru.

04:53.030 --> 04:59.480
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.

04:59.480 --> 04:59.990
Doğru.

04:59.990 --> 05:07.130
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.

05:07.130 --> 05:07.790
Doğru.

05:08.240 --> 05:14.330
Bu API'lerin iş parçacığı tanıtıcısını bir argüman olarak alması mümkün olabilirdi.

05:14.330 --> 05:15.020
Doğru.

05:15.140 --> 05:21.290
Çü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ı

05:21.290 --> 05:22.340
geçirebilir.

05:22.340 --> 05:24.350
Ancak burada durum böyle değil.

05:24.350 --> 05:30.770
Bu nedenle gelecekte iş parçacığı tanıtıcısını kabul etmeyen herhangi bir Posix API'si görürseniz, bu API'nin

05:30.770 --> 05:35.060
etkisinin çağıran iş parçacığı üzerinde gerçekleşeceği anlamına gelir.

05:35.600 --> 05:40.190
Şimdi programımızı derleyip çalıştıralım ve iş parçacığı iptalinin nasıl çalıştığını görelim.

05:41.150 --> 05:43.640
Çocuklar, size demoyu göstermek için.

05:43.640 --> 05:48.230
Şimdi programımızı ilk pencerede çalıştıralım.

05:48.230 --> 05:49.100
Değil mi?

05:49.100 --> 05:53.420
Ve tabii ki bağımlı iş parçacıkları çalışmaya başlamış olmalıdır.

05:53.420 --> 06:01.100
Ş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

06:01.100 --> 06:03.200
yazdığını görebilirsiniz.

06:03.890 --> 06:08.960
Benzer şekilde, bir numaralı iş parçacığı üçüncü pencereye yazarken iki numaralı iş parçacığı dördüncü pencereye

06:08.960 --> 06:09.920
yazmaktadır.

06:09.920 --> 06:10.610
Doğru.

06:10.640 --> 06:16.310
Şimdi konuyu iptal edeyim ve diyelim ki iki numaralı konuyu seçtim.

06:16.400 --> 06:21.050
Yani bu basitçe iki numaralı başlığın iptal edildiği anlamına geliyor, değil mi?

06:21.080 --> 06:24.380
İçeriğini dosyaya yazmayı durdurdu.

06:24.530 --> 06:27.140
Ve başka bir konu seçmeme izin verin.

06:27.170 --> 06:30.110
Diyelim ki bir numaralı ipliği iptal etmek istiyorum.

06:30.230 --> 06:31.070
Doğru.

06:31.160 --> 06:36.410
Böylece bir numaralı konunun iptal edildiğini ve konu iptal edildikten sonra konuya devam edemeyeceğinizi

06:36.410 --> 06:37.340
görebilirsiniz.

06:37.370 --> 06:38.540
Hiçbir yolu yok.

06:38.540 --> 06:43.430
Yapabileceğiniz tek şey, tamamen sıfırdan yeniden bir iş parçacığı oluşturmaktır.

06:43.460 --> 06:47.930
İptal ipliğinizin yaptığı işi yeniden yapmak istiyorsanız.
