WEBVTT

00:04.930 --> 00:11.080
Şimdi muteksleri kullanarak iş parçacığı senkronizasyonu uygularken aklınızda bulundurmanız gereken bazı muteks

00:11.080 --> 00:13.420
kilitleme kurallarını tartışalım.

00:13.540 --> 00:19.840
Dolayısıyla ilk kural, t1 iş parçacığı m muteksini kilitliyorsa, muteksin kilidini açması gerekenin yalnızca t1 iş

00:19.840 --> 00:21.490
parçacığı olduğunu söyler.

00:21.490 --> 00:22.150
Doğru.

00:22.150 --> 00:28.720
Eğer t1 iş parçacığı muteksi kilitlerse, başka hiçbir iş parçacığı t1 iş parçacığı adına bu muteksin kilidini açamaz.

00:28.720 --> 00:33.640
Doğru kilitleyen muteksin kilidini açması gereken aynı iş parçacığıdır.

00:34.450 --> 00:39.550
İkinci kural, T1'in zaten kilidi açılmış bir murex'in kilidini açamayacağını söyler.

00:39.550 --> 00:40.090
Doğru.

00:40.090 --> 00:42.400
Bu tanımlanmamış bir davranışa yol açacaktır.

00:42.430 --> 00:47.680
Programınızda zaten kilidi açık durumda olan bir muteksin kilidini açmaya çalışmamanız

00:47.680 --> 00:48.340
gerekir.

00:48.340 --> 00:49.030
Değil mi?

00:49.060 --> 00:54.310
Bu, program kod akışınızın hatalı olduğu ve hata ayıklamanız gerektiği anlamına gelir.

00:54.520 --> 01:01.420
Üçüncü kural, t1 iş parçacığı m muteksini kilitlerse, sürecin diğer iş parçacıklarının, örneğin T2 ve T3'ün, zaten

01:01.420 --> 01:06.410
kilitli olan muteksi kilitlemeye çalışırlarsa engelleneceğini söyler.

01:06.410 --> 01:07.030
Doğru.

01:07.040 --> 01:09.350
Bu konuyu oldukça detaylı bir şekilde tartıştık.

01:09.800 --> 01:17.060
Dördüncü maddeye göre, T1 ve T2 iş parçacığı zaten kilitli olan muteks m üzerinde bir kilit elde etmek için engellenirse,

01:17.060 --> 01:25.280
işletim çizelgeleme politikası muteks m'nin kilidi sahibi tarafından açıldığında T1 veya T2 arasından hangi iş parçacığının

01:25.280 --> 01:30.110
muteks m üzerindeki kilidi elde edeceğine karar verecektir.

01:30.110 --> 01:30.790
Doğru.

01:30.800 --> 01:36.260
Dolayısıyla, engellenmiş durumda olan iki iş parçacığı T1 ve T2 varsa ve bu iki iş parçacığı neden engellenmiş

01:36.260 --> 01:41.180
durumdaysa, çünkü zaten kilitli olan muteks üzerinde bir kilit elde etmeye çalışıyorlar.

01:41.180 --> 01:49.040
M Doğru, şimdi zaten kilitli olan bu muteks sahibi iş parçacığı tarafından açıldığında, T1 ve T2 arasında hangi iş

01:49.040 --> 01:52.820
parçacığına muteks üzerinde kilit hakkı verilecek?

01:52.820 --> 01:57.440
M Cevap, işletim sistemi zamanlama politikasına bağlı olduğudur.

01:57.440 --> 01:58.160
Doğru.

01:58.920 --> 02:04.290
Daha sonra tehdit muteksi iki kez kilitlemeye çalışırsa, kendi kendine kilitlenecektir.

02:04.380 --> 02:10.410
Bu noktayı anlamak için, süreçte ve bu iş parçacığının yürütme akışında bir t iş parçacığınız olduğunu

02:10.410 --> 02:11.760
varsayalım.

02:11.790 --> 02:16.860
Diyelim ki p noktasında iş parçacığınız m muteksini kilitledi.

02:17.610 --> 02:18.420
Doğru.

02:19.800 --> 02:20.660
Peki, tamam.

02:20.670 --> 02:22.200
İş parçacığınız muteksi kilitledi.

02:22.230 --> 02:22.710
M.

02:22.800 --> 02:30.030
Şimdi yine, yürütme akışının bir noktasında P1 iş parçacığınız yine muteks m'yi kilitlemeye çalışır.

02:30.240 --> 02:32.590
Şimdi bu yanlış bir şey mi?

02:32.610 --> 02:39.340
İş parçacığınız zaten kilitli olan muteksi kilitlemeye çalışırsa, iş parçacığınız kilitlenme durumuna geçecektir.

02:39.360 --> 02:46.290
Bu durumda, iş parçacığınız zaten kendisi tarafından kilitlenmiş olan muteksi kilitlemeye çalıştığı için kendi

02:46.290 --> 02:49.100
kendini kilitleme durumuna girmektedir.

02:49.110 --> 02:49.770
Doğru.

02:49.770 --> 02:53.700
Yani P1 noktasında iş parçacığınız kilitlenme durumuna geçecektir.

02:55.350 --> 03:01.970
Bu yüzden benim tavsiyem, küçük küçük programlar yazmaya çalışmanız ve yukarıdaki beş noktayı doğrulamanızdır.

03:01.980 --> 03:02.610
Değil mi?

03:03.570 --> 03:08.400
Ve son kural Mutekslerin seviye sırasına göre açılması gerektiğini söylüyor.

03:08.400 --> 03:10.010
Peki şimdi bu ne anlama geliyor?

03:10.020 --> 03:16.770
Bu noktayı tekrar anlamak için, bir t iş parçacığınız olduğunu ve p noktasında iş parçacığınızın

03:16.800 --> 03:19.710
muteksi kilitlediğini varsayalım.

03:20.560 --> 03:26.880
Doğru ve p noktasında iş parçacığının mutex m2'yi kilitlediğini varsayalım.

03:26.890 --> 03:27.700
Doğru.

03:27.820 --> 03:35.590
Şimdi t iş parçacığınız kritik bölümle işini bitirdiğinde, mutekslerin kilidini sol sırayla açmalıdır.

03:35.680 --> 03:42.900
Bu, p üç noktasında t iş parçacığının m2 muteksinin kilidini açması gerektiği anlamına gelir.

03:42.910 --> 03:43.690
Doğru.

03:43.690 --> 03:50.980
Ve sonra p dört noktasında iş parçacığınız muteks m1'in kilidini açmalıdır.

03:51.910 --> 03:56.740
Bu yüzden muteksler kilitlendikleri sıranın tersi ile açılmalıdır.

03:57.780 --> 04:03.510
Bu nedenle, çok iş parçacıklı programlarınızda muteksleri kullanırken, lütfen bu noktaları aklınızda bulundurun.
