WEBVTT

00:06.720 --> 00:08.550
Tekrar hoş geldiniz çocuklar.

00:08.580 --> 00:12.810
Şimdi, tartışacağımız bir sonraki sorun yemek filozofu sorunudur.

00:13.050 --> 00:19.260
Bu sorunun ödevi bu dosyada mevcuttur, yani yemek felsefecileri C ödevi ve çözümü

00:19.260 --> 00:23.460
zaten uygulanmış ve bu dosyada size sunulmuştur.

00:23.820 --> 00:29.640
Bir kez daha, bir sorunu kendi başınıza çözme konusunda yeterince deneme yapmadan önce

00:29.640 --> 00:33.450
çözüme bakmayı denemekten kaçınmanızı tavsiye ederim.

00:34.410 --> 00:36.360
Şimdi bunu tartışacağız.

00:36.360 --> 00:43.140
Yemek filozofu probleminin tam olarak ne olduğunu, problemi aşırı karmaşık hale getirmemek için

00:43.140 --> 00:47.220
problem ifadesinde bazı küçük değişiklikler yapacağız.

00:47.250 --> 00:52.170
Ayrıca yemek filozofu probleminin iş parçacığı senkronizasyonu dünyasında neden özel bir

00:52.170 --> 00:57.660
problem olduğunu ve üretici tüketici probleminden sonra neden çok ilgi çektiğini tartışacağız.

00:57.720 --> 01:04.260
Yani yemek filozofu problemi standart bir problemdir ve varyantları internette kolayca bulunabilir.

01:04.290 --> 01:07.030
Şimdi problem cümlesini tartışalım.

01:07.360 --> 01:14.110
Sağ taraftaki diyagramda da görebileceğiniz gibi, lezzetli bir pastamız var

01:14.110 --> 01:20.950
ve şu anda bu pastanın etrafında oturan beş filozofumuz var, elinizde sadece beş

01:20.950 --> 01:28.390
kaşık var ve bir filozof ancak hem sol hem de sağ tarafındaki kaşıklar mevcut olduğunda

01:28.390 --> 01:30.180
pasta yiyebilir.

01:30.190 --> 01:31.040
Doğru.

01:31.060 --> 01:39.520
Yani sıfırıncı filozof ancak kaşık sıfır olduğunda ve her ikisi için de kaşık sıfırıncı filozof için mevcut olduğunda

01:39.520 --> 01:40.810
pasta yiyebilir.

01:40.810 --> 01:44.290
Ve aynı şey bu diyagramdaki her filozof için de geçerlidir.

01:44.290 --> 01:45.040
Değil mi?

01:45.190 --> 01:47.920
İşte problem cümlesinin kurgusu budur.

01:47.950 --> 01:52.180
Ne kadar kaşık varsa o kadar da yemek filozofu vardır.

01:52.180 --> 01:52.980
Değil mi?

01:53.020 --> 01:57.730
Şimdi bu sorun bildiriminin şart ve koşullarının neler olduğunu tartışalım.

01:58.450 --> 02:03.250
Yani filozof ancak iki kaşığa da erişimi olduğunda yemek yiyebilir.

02:03.640 --> 02:05.520
Yani bu oldukça açık bir durum.

02:05.530 --> 02:11.350
Bir filozofun iki kaşığa da erişimi olmadığı sürece pastayı yemesine izin verilmez.

02:11.710 --> 02:16.800
Filozof önce sol kaşığa sonra da sağ kaşığa erişmeye çalışır.

02:16.810 --> 02:22.660
Dolayısıyla bu, çözümümüzü tasarlarken ve uygularken uymamız veya saygı göstermemiz gereken kısıtlamalardan

02:22.660 --> 02:23.500
biridir.

02:23.980 --> 02:29.890
Örneğin, filozof sıfırın bir pasta yemek istediğini varsayalım, değil mi?

02:30.190 --> 02:38.950
Yani filozof sıfıra göre, sol kaşık ESP sıfırdır ve sağ kaşık sağ için ESP'dir.

02:38.950 --> 02:45.010
Bu yüzden Filozof sıfır önce sol kaşığına erişmek için bir talepte bulunacaktır.

02:45.010 --> 02:51.730
Ve sıfırıncı filozof sol kaşığa erişim hakkı elde ettiğinde, sadece sıfırıncı filozofun sağ kaşık için erişim

02:51.730 --> 02:54.430
hakkı talep etmesine izin verilir.

02:54.700 --> 02:55.510
Doğru.

02:55.900 --> 02:59.140
Bu, çözümünüzün uyması gereken kısıtlamadır.

02:59.170 --> 03:03.010
Bu kısıtlama, bu problemdeki her filozof için geçerlidir.

03:03.460 --> 03:10.600
Üç numaralı kısıtlama, sol kaşığa erişim sağlandıktan sonra sağ kaşık mevcut değilse

03:10.600 --> 03:17.140
filozofun sol kaşığı da bırakması ve bir saniye bekledikten sonra baştan başlaması

03:17.140 --> 03:19.420
gerektiğini söyler.

03:19.420 --> 03:20.200
Doğru.

03:20.320 --> 03:26.830
Bu diyagramda sıfırıncı filozofa sol kaşığa erişim hakkı verildiğini ve sıfırıncı filozofun

03:26.830 --> 03:33.940
sağ kaşığa erişim hakkı için talepte bulunduğunu ve sağ kaşığın boş olmadığını çünkü dördüncü filozof

03:33.940 --> 03:40.720
tarafından kullanıldığını varsayalım. Böyle bir durumda sıfırıncı filozof sol kaşığa erişim

03:40.870 --> 03:44.700
hakkından da vazgeçecektir.

03:44.710 --> 03:45.490
Değil mi?

03:45.490 --> 03:51.670
Ve filozof sıfır, bir saniye dinlendikten sonra sol kaşığa erişmeye çalışacaktır.

03:51.940 --> 03:52.780
Doğru.

03:53.460 --> 03:59.850
Yani burada sıfır filozofunun sağ kaşığına erişememesi durumunda, zaten erişebildiği

03:59.850 --> 04:06.330
sol kaşığından vazgeçmesi gerektiğini görebilirsiniz, değil mi?

04:07.680 --> 04:14.130
O halde dördüncü kısıtlama, filozofun her iki kaşığa da eriştikten sonra bir saniye boyunca pastanın tadını

04:14.130 --> 04:15.850
çıkaracağını söyler.

04:15.870 --> 04:16.680
Doğru.

04:16.680 --> 04:24.090
Yani bu basitçe şu anlama gelir: Eğer sıfırıncı filozof her iki kaşığa da erişebilirse, sıfırıncı filozofun bir

04:24.090 --> 04:28.830
saniyeliğine pastaya erişmesine ve pastayı yemesine izin verilir.

04:28.860 --> 04:37.260
Bu basitçe, filozof sıfırın kaşıklarından birini bir saniye bile bırakmayacağı anlamına

04:37.260 --> 04:38.250
gelir.

04:38.280 --> 04:39.120
Doğru.

04:39.300 --> 04:42.930
Beş numaralı kısıtlama da bunu söylüyor.

04:42.960 --> 04:47.580
Filozof bir saniye pastanın tadını çıkardıktan sonra iki kaşığı da bırakır.

04:48.480 --> 04:55.300
Altı numaralı kısıtlama, filozofun bir saniye bekledikten sonra pastanın ikinci dilimi için girişimde

04:55.300 --> 04:56.770
bulunacağını söyler.

04:57.190 --> 05:03.880
Yani bu basitçe şu anlama gelmektedir: Filozof pastaya sıfır erişim sağladıktan ve pastayı bir saniyeliğine

05:03.880 --> 05:10.900
yedikten sonra, filozof her iki kaşığı da serbest bırakır ve her iki kaşığa da birbiri ardına ikinci kez erişim

05:10.900 --> 05:13.360
sağlamaya çalışır.

05:13.360 --> 05:14.320
Bir saniye.

05:14.470 --> 05:15.250
Doğru.

05:15.250 --> 05:19.960
Bu da çözümümüzde uymamız gereken bir diğer kısıtlamadır.

05:20.140 --> 05:27.280
Böylece filozof bir saniye boyunca pastanın tadını çıkarır ve bu bir saniyeden sonra filozof

05:27.280 --> 05:34.690
iki kaşığından da vazgeçer ve iki kaşığından da vazgeçtikten sonra filozof ancak bir saniye sonra

05:34.750 --> 05:37.240
kaşıklara erişim talep eder.

05:37.510 --> 05:42.850
Şimdi bu problem cümlesinde filozoflar hiçbir şey değiller, ama tehditler ve kaşıklardan

05:42.850 --> 05:47.350
başka bir şey olmayan kaynaklar için rekabet ediyorlar, değil mi?

05:47.380 --> 05:49.570
Bunlar sol ve sağ kaşıklardır.

05:49.870 --> 05:56.260
Tüm bu filozof tehditlerin sonsuz bir döngü içinde çalışacağı bir çözüm tasarlayacağız.

05:56.260 --> 05:57.130
Doğru.

05:57.370 --> 06:03.820
Ve çözümümüz, bitişik olmayan filozofların paralel olarak yemek yiyebilmelerini sağlamalıdır.

06:03.820 --> 06:04.500
Değil mi?

06:04.510 --> 06:12.610
Örneğin, filozof sıfır ve filozof iki aynı anda paralel olarak yemek yiyebilir çünkü sol ve sağ

06:12.610 --> 06:15.010
kaşıkları üst üste binmez.

06:17.820 --> 06:24.000
Benzer şekilde, filozof üç ve filozof sıfır paralel olarak yemek yiyebilir, değil mi?

06:24.630 --> 06:31.230
Dikkat ederseniz, bu bir yemek filozofu problemidir ve şu anda belki de size aşırı karmaşık

06:31.230 --> 06:33.210
görünmektedir.

06:33.240 --> 06:37.320
Adım adım bir program tasarlayacağız.

06:37.320 --> 06:39.780
Veri yapılarını tartışacağız.

06:39.780 --> 06:46.650
Programımızı nasıl yapılandıracağımızı veya düzenleyeceğimizi tartışacağız ve daha sonra tüm

06:46.650 --> 06:51.270
bu kısıtlamaları karşılayan adım adım çözümü tartışacağız.

06:51.270 --> 06:52.080
Değil mi?

06:52.620 --> 06:59.370
Eminim şu anda bu sorunu çözmeye nasıl başlayacağınız konusunda hiçbir fikriniz olmayabilir.

06:59.370 --> 07:06.150
Bu yüzden benimle kalın çünkü iş parçacığı senkronizasyonu, daha önce de söylediğim gibi, bilgisayar bilimleri alanındaki

07:06.150 --> 07:07.860
en zor konulardan biridir.

07:07.860 --> 07:12.990
Matematikte olduğu gibi, bu beceride de ustalaşmak için çok ama çok pratik yapmak gerekir.

07:13.500 --> 07:19.240
Gerçi şimdi, üretici tüketici sorunu o kadar da karmaşık bir sorun değildi.

07:19.240 --> 07:25.870
Veri yapılarınızı, program yapılarınızı planlamadan ve bunun da ötesinde adım adım

07:25.870 --> 07:30.970
çözümü uygulamadan yemek filozofu problemini çözemezsiniz.

07:30.970 --> 07:31.780
Değil mi?

07:31.780 --> 07:38.080
Orta derecede karmaşık iş parçacığı senkronizasyonuna dayalı programların da dikkatle tasarlanmış

07:38.110 --> 07:41.020
veri yapıları ve program yapısı olmalıdır.

07:41.140 --> 07:46.990
Bu nedenle, bu sorun bildirimini açıklayan sunum slaytları referansınız için kaynak bölümüne

07:46.990 --> 07:48.280
eklenmiştir.

07:48.850 --> 07:54.430
Şimdi bir sonraki ders videosunda, bu sorunun çözümünü tasarlamaya doğru ilerleyelim.
