WEBVTT

00:05.090 --> 00:10.670
Şimdi iki iş parçacığı arasında karşılıklı dışlamayı nasıl uygulayacağımızı görelim.

00:11.300 --> 00:16.520
Amacımız, paylaşılan bir veri yapısı üzerinde aynı anda yalnızca bir iş parçacığının işlem yapmasıdır.

00:16.520 --> 00:17.270
Değil mi?

00:18.440 --> 00:23.200
Yani yapacağımız şey, her şeyden önce mutex tipi değişkenimizi almamız gerektiğidir.

00:23.210 --> 00:29.720
Bu nedenle, bu küresel veri yapısını sürecin iki eşzamanlı iş parçacığı tarafından iş parçacığı güvenli olmayan erişime

00:29.750 --> 00:33.080
karşı korumak için kullanılacak küresel bir muteks aldık.

00:33.080 --> 00:33.740
Doğru.

00:33.830 --> 00:41.330
Ve uygulamanız veya işleminiz başladığında, ana işlevde bu muteksi başlatmanız yeterlidir,

00:41.330 --> 00:42.080
değil mi?

00:43.860 --> 00:47.160
Artık muteksiniz kullanıma hazırdır.

00:47.280 --> 00:54.060
Bundan sonra yapacağım şey, karşılıklı dışlamayı uygulamak için bu mutex değişkenini

00:54.060 --> 00:55.330
kullanacağım.

00:55.350 --> 00:59.700
Şimdi diziye gerçekten erişen iş parçacıklarına gelelim.

00:59.820 --> 01:04.950
Şimdi, bir dizi olan global veri yapım üzerinde okuma ve yazma işlemini gerçekleştiren

01:04.950 --> 01:07.050
iş parçacıklarına geliyoruz.

01:07.080 --> 01:13.080
Burada Swap adında bir iş parçacığı geri çağırma işlevim olduğunu görebilirsiniz.

01:13.080 --> 01:16.960
Ve bu fonksiyonda dizinin ilk ve son elemanını değiştiriyorum.

01:17.010 --> 01:24.630
Bu nedenle, iş parçacığının dizi üzerinde yazma işlemini gerçekleştirdiği mantığı basitçe sandviç yapacağım.

01:24.780 --> 01:25.620
Doğru.

01:25.620 --> 01:31.560
Bu yüzden dizinin iki elemanını iş parçacığı muteksi, kilitleme ve kilit açma arasında değiştirmenin tüm

01:31.560 --> 01:33.380
mantığını sandviç yapacağım.

01:33.390 --> 01:34.170
Doğru.

01:34.770 --> 01:41.100
Benzer şekilde, bir iş parçacığının dizinin öğelerinin toplamını hesapladığı sum adlı başka bir iş parçacığı geri

01:41.100 --> 01:42.480
çağırma işlevi vardır.

01:42.510 --> 01:49.210
Bu yüzden, dizinin elemanları üzerinde yineleme yaptığım ve toplamı hesapladığım tüm mantığı sandviç

01:49.210 --> 01:50.290
yapacağım.

01:50.620 --> 01:57.640
Burada, dizinin elemanlarının toplamını hesaplama mantığını thread, mutex, lock ve thread, mutex

01:57.640 --> 02:01.480
ve lock arasında sandviç yaptığımı görebilirsiniz.

02:01.520 --> 02:02.320
Doğru.

02:04.430 --> 02:11.390
Yani bu basitçe, t bir iş parçacığı dizinin elemanlarının toplamını hesapladığında, bu muteksi kilitleyeceği

02:11.390 --> 02:12.820
anlamına gelir.

02:12.830 --> 02:13.580
Değil mi?

02:13.580 --> 02:19.460
Ve bu muteks kilitliyken, diğer iş parçacığı dizinin iki elemanını değiştirmeye

02:19.460 --> 02:26.780
çalışırsa, muteksi kilitli durumda bulacak ve bu nedenle ikinci iş parçacığı 82 numaralı satırda bloke

02:26.780 --> 02:27.890
olacaktır.

02:28.340 --> 02:29.150
Doğru.

02:29.900 --> 02:33.640
Yani temel olarak burada kod kilitlemeyi konuşlandırdım.

02:33.650 --> 02:37.130
Kodun muteks kullanan kısmını kilitliyorum.

02:37.250 --> 02:43.910
Şimdi, bu programı derleyip çalıştırırsanız, çıktının her zaman 15 olması garanti edilir, bu da yazar iş parçacığı

02:44.090 --> 02:48.370
dizi üzerindeki işlemini tamamen bitirdiğinde beklenir.

02:48.380 --> 02:52.970
Daha sonra sadece okuyucu iş parçacığı dizinin elemanlarının toplamını hesaplamaya çalışır.

02:52.970 --> 02:53.690
Doğru.

02:53.690 --> 02:59.180
Ve okuyucu iş parçacığı dizinin elemanlarının toplamını hesaplarken, yazıcı iş parçacığı dizinin elemanlarını

02:59.180 --> 03:02.150
bu kadar basit bir şekilde değiştiremez.

03:02.150 --> 03:09.180
Böylece karşılıklı dışlama garanti altına alınır ve bu nedenle programınız bu karşılıklı dışlama korumasıyla

03:09.180 --> 03:14.880
çalıştırıldığında, programınız 15 olarak toplam olan doğru çıktıyı üretecektir.

03:14.880 --> 03:15.510
Doğru.

03:16.900 --> 03:23.890
Bu, mutekslerin veri yapıları üzerinde çakışan işlemleri gerçekleştiren iki iş parçacığı arasında karşılıklı dışlama

03:23.890 --> 03:27.250
sağlamak için nasıl kullanıldığına bir örnektir.

03:27.970 --> 03:33.100
Elbette bu kursun ileri düzey bölümüne ilerledikçe Mutex'lerin daha gelişmiş kullanımıyla

03:33.100 --> 03:34.870
ilgilenecektik.
