WEBVTT

00:04.940 --> 00:09.020
Evet arkadaşlar, şimdi kritik bölümlerin ne olduğunu anlamaya çalışalım.

00:09.080 --> 00:13.970
Kritik bölüm, iş parçacığı senkronizasyonundan bahsederken en sık kullanılan terimdir.

00:14.360 --> 00:19.580
Yani kod Alıntı Bir sürecin paylaşılan verilerine erişmek kritik bölümlerdir.

00:19.610 --> 00:21.740
Paylaşılan veriler global değişkenler olabilir.

00:21.740 --> 00:27.350
Yığın veri yapıları olabilir, statik değişkenler olabilir veya dediğim gibi, soketler gibi açık dosya

00:27.350 --> 00:29.180
tanımlayıcıları olabilir.

00:29.780 --> 00:36.320
Bu nedenle temel kural, kritik bölümlerin eşzamanlı iş parçacıkları tarafından, ancak her seferinde yalnızca bir iş parçacığı

00:36.320 --> 00:38.720
tarafından yürütülmesi gerektiğidir.

00:39.290 --> 00:45.980
Yani P sürecinizde birden fazla iş parçacığı, t1 iş parçacığı, T2 ve T3 iş parçacığı olabilir.

00:45.980 --> 00:46.790
Doğru.

00:46.910 --> 00:55.850
Dolayısıyla, bu sarı renkli bölgeye iş parçacığı, T1 iş parçacığı, T2 ve T3 tarafından aynı anda erişilmesine izin verirsek,

00:55.850 --> 00:59.930
bu renkli bölge kritik bölüm haline gelir.

00:59.960 --> 01:00.680
Değil mi?

01:00.710 --> 01:01.190
Neden?

01:01.190 --> 01:06.330
Bu kritik bir bölümdür çünkü bu bölge içinde global değişkene erişmeye çalışıyorsunuz.

01:06.330 --> 01:07.140
Değil mi?

01:08.600 --> 01:15.020
Dolayısıyla, sürecin birden fazla eşzamanlı iş parçacığının kritik bölümü korumasız bir şekilde

01:15.020 --> 01:21.260
yürütmesine izin verirseniz, programınız beklenmedik bazı davranışlar üretebilir.

01:21.290 --> 01:23.390
Programınız segment hatası verebilir.

01:23.420 --> 01:29.060
Programınız veri bozulması gösterebilir veya programınız herhangi bir anormal davranış gösterebilir.

01:29.420 --> 01:35.600
Dolayısıyla iş parçacığı senkronizasyonu, programınızdaki kritik bölümü belirlemek ve sürecin birkaç iş parçacığı

01:35.600 --> 01:42.890
tarafından paylaşılan kaynaklara korumasız eşzamanlı erişimi önlemek için çeşitli teknikler uygulamakla ilgilidir.

01:43.970 --> 01:47.270
İş parçacığı senkronizasyonu tamamen bununla ilgilidir.

01:47.600 --> 01:50.300
Çok basit bir örnek verelim.

01:50.300 --> 01:53.210
Sol tarafta bir program düşünün.

01:53.240 --> 02:00.320
Bu programda statik bir I değişkeniniz var ve i1 i2 ve i3 komutlarınız var ve program çok basit,

02:00.320 --> 02:01.520
değil mi?

02:01.550 --> 02:07.980
Şimdi diyelim ki foo işlevi üç eşzamanlı iş parçacığı tarafından yürütülürse, programın olası

02:07.980 --> 02:09.750
çıktıları nelerdir?

02:09.750 --> 02:10.380
Doğru.

02:10.410 --> 02:12.480
Bu basit bir mülakat sorusudur.

02:12.480 --> 02:19.590
Kodun bu kısmının T1, T2 ve T3 olmak üzere üç eş zamanlı iş parçacığı tarafından yürütülmesine izin verirseniz,

02:19.590 --> 02:23.160
bu programın üretebileceği olası çıktılar nelerdir?

02:23.580 --> 02:25.020
Sana bırakıyorum.

02:26.160 --> 02:31.770
Dolayısıyla bu program, iş parçacığı yürütme sırasına bağlı olarak farklı çıktılar üretebilir.

02:31.770 --> 02:33.150
Yani o konuyu görebilirsiniz.

02:33.180 --> 02:40.020
T1, I1 ve I2 komutlarını tamamlayabilir ve ardından bağlam geçişi gerçekleşebilir ve T2 iş parçacığı

02:40.020 --> 02:45.240
I1 ve i2 ve i3 komutlarını yürütmek için işlemciye yüklenebilir.

02:45.270 --> 02:50.010
Daha sonra t2 iş parçacığı CPU ve iş parçacığından boşaltılabilir.

02:50.040 --> 02:57.480
T3 CPU'ya yüklenebilir ve bu, üç iş parçacığı da bu kısa programın tüm talimatlarını yerine getirene

02:57.480 --> 02:59.160
kadar devam eder.

02:59.160 --> 03:06.390
Böylece i1 i2 ve i3 komutlarının, işletim sisteminizin bu iş parçacıklarını CPU üzerinde nasıl programladığına bağlı olarak

03:06.390 --> 03:11.490
bu üç iş parçacığı tarafından herhangi bir sırada yürütülebileceğini görebilirsiniz.

03:11.520 --> 03:12.210
Doğru.

03:12.750 --> 03:18.690
Bir iş parçacığı CPU'dan çıkarılabilir ve herhangi bir zamanda CPU'ya yeni bir iş parçacığı yüklenebilir.

03:18.690 --> 03:25.500
Şu anda bu kısa programda, eğer I yerel bir değişken olarak değiştirilirse, o zaman hiçbir kritik bölüm

03:25.500 --> 03:26.280
yoktur.

03:26.280 --> 03:27.040
Doğru.

03:27.060 --> 03:32.400
Çünkü bu durumda I değerindeki herhangi bir güncelleme diğer iş parçacığı tarafından görülmeyecektir.

03:32.430 --> 03:33.180
Doğru.

03:33.660 --> 03:39.600
Aynı veritabanını veya aynı veri yapısını güncellemeye çalışan iki veya daha fazla iş parçacığı ya da aynı bellek tamponlarına

03:39.600 --> 03:45.300
okuma veya yazma işlemleri gerçekleştirmeye çalışan iki veya daha fazla iş parçacığı kritik bölümlere örnek olarak

03:45.300 --> 03:46.410
verilebilir.

03:46.440 --> 03:50.010
Bunlar kritik bölümün diğer iki örneğidir.

03:50.010 --> 03:55.320
Dolayısıyla kritik bölümler, iş parçacığı senkronizasyon teknikleri kullanılmadan birden fazla iş parçacığı

03:55.320 --> 04:01.890
tarafından erişilmelerine izin verilmesi durumunda uygulamanın er ya da geç başarısızlığa uğrayacağı anlamında kritiktir.

04:01.890 --> 04:02.700
Değil mi?

04:03.150 --> 04:08.730
Dolayısıyla, bu kurs boyunca kritik bölümleri belirleyeceğiz ve bu kritik bölümü, iş parçacığı

04:08.730 --> 04:15.150
senkronizasyon tekniklerinden birini veya daha fazlasını veya kombinasyonunu kullanarak sürecin birden fazla

04:15.150 --> 04:19.830
iş parçacığı tarafından korumasız eşzamanlı erişime karşı koruyacağız.
