Multicore/Multithread Programlama



Benzer belgeler
İşletim Sistemleri-II

İşletim Sistemlerine Giriş

Süreç 1 Kavramı ve Oluşturma Yöntemleri

Bölüm 4: İş Parçacıkları. Operating System Concepts with Java 8 th Edition

Proses. Prosesler 2. İşletim Sistemleri

İŞLETİM SİSTEMLERİ (POSIX THREADS v1)

PROSESLER. Proses. Proses

PROCESS YARATIMI (TEKRAR):

Bilgisayar Sistemlerine Genel Bakış

İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık İşletim Sistemleri

İşletim Sistemleri (Operating Systems)

Bölüm 4: Threads (İş Parçaları)

Struct VE GÖSTERİCİLER FONKSİYONLARDA STRUCT KULLANIMI Programlama dilleri hafta -

Bilgisayar İşletim Sistemleri BLG 312

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

Prosesler Arası Haberleşme ve Senkronizasyon

Yazılım Mühendisliğine Giriş 2018 GÜZ

İşletim Sistemleri. Hazırlayan: M. Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

İŞLETİM SİSTEMLERİ. (Operating Systems)

Giriş. geleneksel işletim sistemlerinde her prosesin. aynı adres uzayında birden fazla akış kontrolü gerekebilir

İŞLETİM SİSTEMLERİ DÖNEMİÇİ SINAVI

YZM 3102 İşletim Sistemleri

Bölüm 5: İşlemci Zamanlaması. Operating System Concepts with Java 8 th Edition

İşletim Sistemlerine Giriş

Qt ile Bir Ağ Uygulaması

BİLG Dr. Mustafa T. Babagil 1

YZM 3102 İşletim Sistemleri

Bilgisayar Ağları ve Dağıtık Programlama

Paralel Programlama Ortamları

İşletim Sistemleri. Hazırlayan: M. Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI

Giris {\} /\ Suhap SAHIN Onur GÖK

BLM 111 ALGORİTMA VE PROGRAMLAMA I

DOSYA İŞLEMLERİ Programlama dilleri hafta -

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

Görsel Programlama DERS 11. Görsel Programlama - Ders11/ 1

Değişkenler tanımlanırken onlara ne tür veriler atanabileceği de belirtilir. Temel veri türleri oldukça azdır:

İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık İşletim Sistemleri

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

ALGORİTMA VE PROGRAMLAMA II

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

Linux Sistemlerde Süreç Zamanlama Algoritmaları (Scheduler Algorithms) ÜMİT İŞGÜDER

Sınav tarihi : Süre : 60 dak.

Sistem Programlama. (*)Dersimizin amaçları Kullanılan programlama dili: C. Giriş/Cıkış( I/O) Sürücülerinin programlaması

İÇİNDEKİLER. İşletim Sistemleri

Bilgisayar İşletim Sistemleri BLG 312

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

BİLİŞİM SİSTEMLERİNİN PRENSİPLERİ

Bilgisayar İşletim Sistemleri BLG 312

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Giriş. İplik Modeli. geleneksel işletim sistemlerinde her prosesin özel adres uzayı ve tek akış kontrolü var.

int printf (const char *format [, argument,...]);

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

Fonksiyonlar -Genel Test- A

Windows'da çalışırken pek çok durumda bir işe başlamadan önce işletim sisteminin o işe ilişkin bilgileri depolayacağı bir alan yaratması gerekir.

ÇOK ÇEKİRDEKLİ İŞLEMCİLER VE PARALEL YAZILIM GELİŞTİRME OLANAKLARI HAKKINDA BİR İNCELEME

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

C++ Dersi: Nesne Tabanlı Programlama

KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ. BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr)

Eskişehir Osmangazi Üniversitesi, Fen Edebiyat Fakültesi Matematik- Bilgisayar Bölümü, Eskişehir 2

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

İşletim Sistemlerine Genel Bakış

ve Senkronizasyon Senkronizasyon Eş Zamanlılık Sorunlar Sorunlar Çözüm Örnek

Adı Soyadı Öğrenci No. Toplam (100p) 2 (10p) +10p. 5 (25p) +10p. 3 (20p) 4 (25p) 1 (20p)

Multithreading & Asynchronous Programlama

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

LPC2104 Mikro Denetleyicisini KEIL İle Programlamak

Bölüm 2 - C ile Programlamaya Giriş

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

İş Parçacıkları Thread(s)

şeklinde tanımlanmıştır. O halde, dosyaları daha önceki bilgilerimizi kullanarak FILE *Dosya1, *Dosya2;

BMS-302 İleri Web Programlama. İş Parçacığı (Thread) ve Soket (Socket) Programlama

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

ALGORİTMA VE PROGRAMLAMA II

Algoritma Analizi Big O

Tarih Saat Modül Adı Öğretim Üyesi. 01/05/2018 Salı 3 Bilgisayar Bilimlerine Giriş Doç. Dr. Hacer Karacan

INTEGER OVERFLOW ***************************************************************/

sayi=3 harf=a reelsayi=8.72 Bellek durumu 5. İşaretç iler (pointers)

İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık İşletim Sistemleri

Deney 7: Fonksiyon Tanımlama ve Parametre Aktarım Yöntemleri

Final Sınavı Soruları Bahar 2018

Küme Bilgisayarlar. Enabling Grids for E-sciencE. Onur Temizsoylu. Grid ve Küme Bilgisayarlarda Uygulama Geliştirme Eğitimi ODTÜ, Ankara

Bölüm 5: İşlemci Zamanlaması. Operating System Concepts with Java 8 th Edition

BM-311 Bilgisayar Mimarisi

KONTROL VE OTOMASYON KULÜBÜ

REALTIME LINUX. 3. Linux ve Özgür Yazılım Şenliği Murat Demirten, 16 Mayıs 2004, Ankara

int main(void) { int num = 0; int input = 1; int retval = 0; struct NODE *nodepointer; nodepointer = (struct NODE *)malloc(sizeof(struct NODE));

İşletim Sistemleri. Hazırlayan: M. Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

else *on=*on+1; return gecici; } int giseyeyerlestir(struct gise*giseler) {//giseye bos olmasi durumunda yerlestirme yapiliyor...

İskender Atasoy. * iskenderatasoy@yahoo.co.uk Özet

İŞ SIRALAMA. İş Sıralamanın Amaçları. İş Sıralama Türleri - 1. İş Sıralama. İş Sıralama Türleri - 2

İşletim Sistemleri. B L M Mesleki Te r minoloji I I Ö ğ r e n c i S unumu

Bilgisayar Mühendisliğine Giriş. Yrd.Doç.Dr.Hacer KARACAN

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

1 PROGRAMLAMAYA GİRİŞ

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

Final Sınavı Soruları Güz, Süre: 90 Dakika

Transkript:

Multicore/Multithread Programlama Onur Tolga Şehitoğlu Bilgisayar Mühendisliği 7 Şubat 2008

Başlıklar 1 Gereksinimi Dal ile Süreç Çok İşlemci ve Dal Modelleri Neden Çoklu Dal Programlama? 2 Çok İşlemci/Çok Çekirdek 3 POSIX Thread Kütüphanesi Dalları yaratma ve Sonlandırma 4 Özet Örnek: Merhaba Dünya Örnek: Paralel Sıralama Senkronizasyon/Mutex Örnek: Yemek Yiyen Düşünürler İki Fazlı Kilitleme Bekleme ve Sinyalleşme Örnek: Üretici/Tüketici

Gereksinimi Gereksinimi Çokluişlem (multitasking) Çoklu süreç (multiprocess) Çoklu dal (multithreading) Tek işlemcide Çok dallılık gereksinimi Süreçler arası iletişim, Bağlam değişimi (kernel mode/user mode) işlemci kullanımı Kullanıcı düzeyinde dallar (user level threads)

Gereksinimi Gereksinimi Çokluişlem (multitasking) Çoklu süreç (multiprocess) Çoklu dal (multithreading) Tek işlemcide Çok dallılık gereksinimi Süreçler arası iletişim, Bağlam değişimi (kernel mode/user mode) işlemci kullanımı Kullanıcı düzeyinde dallar (user level threads)

Gereksinimi Gereksinimi Çokluişlem (multitasking) Çoklu süreç (multiprocess) Çoklu dal (multithreading) Tek işlemcide Çok dallılık gereksinimi Süreçler arası iletişim, Bağlam değişimi (kernel mode/user mode) işlemci kullanımı Kullanıcı düzeyinde dallar (user level threads)

Gereksinimi Gereksinimi Çokluişlem (multitasking) Çoklu süreç (multiprocess) Çoklu dal (multithreading) Tek işlemcide Çok dallılık gereksinimi Süreçler arası iletişim, Bağlam değişimi (kernel mode/user mode) işlemci kullanımı Kullanıcı düzeyinde dallar (user level threads)

Gereksinimi Gereksinimi Çokluişlem (multitasking) Çoklu süreç (multiprocess) Çoklu dal (multithreading) Tek işlemcide Çok dallılık gereksinimi Süreçler arası iletişim, Bağlam değişimi (kernel mode/user mode) işlemci kullanımı Kullanıcı düzeyinde dallar (user level threads)

Dal ile Süreç Dal ile Süreç Bellek alanı aynı alan farklı alanlar Geçiş aynı bağlam bağlam değişimi Senkronizasyon ve iletişim İşletim sistemi/karmaşık kullanıcı modu/basit

Çok İşlemci ve Dal Modelleri Dal Modelleri Kullanıcı düzeyi dallar Çok hızlı, basit, kullanıcı kütüphanesi Tek işlemci için ideal Çok işlemciden faydalanamaz Kernel düzeyi dallar (Linux 2.2-2.4) Dallar kernel tarafından süreç gibi yönetilir Çoklu sürece benzer sorunlar Yavaş Çok Dallı Kernel (Solaris, Linux 2.6) Kullanıcı düzeyi/kernel etkileşimi Etkin çok işlemci/çoklu süreç/çoklu dal Kernel birden fazla işlemciyi kullanır

Çok İşlemci ve Dal Modelleri Dal Modelleri Kullanıcı düzeyi dallar Çok hızlı, basit, kullanıcı kütüphanesi Tek işlemci için ideal Çok işlemciden faydalanamaz Kernel düzeyi dallar (Linux 2.2-2.4) Dallar kernel tarafından süreç gibi yönetilir Çoklu sürece benzer sorunlar Yavaş Çok Dallı Kernel (Solaris, Linux 2.6) Kullanıcı düzeyi/kernel etkileşimi Etkin çok işlemci/çoklu süreç/çoklu dal Kernel birden fazla işlemciyi kullanır

Çok İşlemci ve Dal Modelleri Dal Modelleri Kullanıcı düzeyi dallar Çok hızlı, basit, kullanıcı kütüphanesi Tek işlemci için ideal Çok işlemciden faydalanamaz Kernel düzeyi dallar (Linux 2.2-2.4) Dallar kernel tarafından süreç gibi yönetilir Çoklu sürece benzer sorunlar Yavaş Çok Dallı Kernel (Solaris, Linux 2.6) Kullanıcı düzeyi/kernel etkileşimi Etkin çok işlemci/çoklu süreç/çoklu dal Kernel birden fazla işlemciyi kullanır

Çok İşlemci ve Dal Modelleri Dal Modelleri Kullanıcı düzeyi dallar Çok hızlı, basit, kullanıcı kütüphanesi Tek işlemci için ideal Çok işlemciden faydalanamaz Kernel düzeyi dallar (Linux 2.2-2.4) Dallar kernel tarafından süreç gibi yönetilir Çoklu sürece benzer sorunlar Yavaş Çok Dallı Kernel (Solaris, Linux 2.6) Kullanıcı düzeyi/kernel etkileşimi Etkin çok işlemci/çoklu süreç/çoklu dal Kernel birden fazla işlemciyi kullanır

Çok İşlemci ve Dal Modelleri Dal Modelleri Kullanıcı düzeyi dallar Çok hızlı, basit, kullanıcı kütüphanesi Tek işlemci için ideal Çok işlemciden faydalanamaz Kernel düzeyi dallar (Linux 2.2-2.4) Dallar kernel tarafından süreç gibi yönetilir Çoklu sürece benzer sorunlar Yavaş Çok Dallı Kernel (Solaris, Linux 2.6) Kullanıcı düzeyi/kernel etkileşimi Etkin çok işlemci/çoklu süreç/çoklu dal Kernel birden fazla işlemciyi kullanır

Çok İşlemci ve Dal Modelleri Dal Modelleri Kullanıcı düzeyi dallar Çok hızlı, basit, kullanıcı kütüphanesi Tek işlemci için ideal Çok işlemciden faydalanamaz Kernel düzeyi dallar (Linux 2.2-2.4) Dallar kernel tarafından süreç gibi yönetilir Çoklu sürece benzer sorunlar Yavaş Çok Dallı Kernel (Solaris, Linux 2.6) Kullanıcı düzeyi/kernel etkileşimi Etkin çok işlemci/çoklu süreç/çoklu dal Kernel birden fazla işlemciyi kullanır

Çok İşlemci ve Dal Modelleri Dal Modelleri Kullanıcı düzeyi dallar Çok hızlı, basit, kullanıcı kütüphanesi Tek işlemci için ideal Çok işlemciden faydalanamaz Kernel düzeyi dallar (Linux 2.2-2.4) Dallar kernel tarafından süreç gibi yönetilir Çoklu sürece benzer sorunlar Yavaş Çok Dallı Kernel (Solaris, Linux 2.6) Kullanıcı düzeyi/kernel etkileşimi Etkin çok işlemci/çoklu süreç/çoklu dal Kernel birden fazla işlemciyi kullanır

Çok İşlemci ve Dal Modelleri Dal Modelleri Kullanıcı düzeyi dallar Çok hızlı, basit, kullanıcı kütüphanesi Tek işlemci için ideal Çok işlemciden faydalanamaz Kernel düzeyi dallar (Linux 2.2-2.4) Dallar kernel tarafından süreç gibi yönetilir Çoklu sürece benzer sorunlar Yavaş Çok Dallı Kernel (Solaris, Linux 2.6) Kullanıcı düzeyi/kernel etkileşimi Etkin çok işlemci/çoklu süreç/çoklu dal Kernel birden fazla işlemciyi kullanır

Çok İşlemci ve Dal Modelleri Dal Modelleri Kullanıcı düzeyi dallar Çok hızlı, basit, kullanıcı kütüphanesi Tek işlemci için ideal Çok işlemciden faydalanamaz Kernel düzeyi dallar (Linux 2.2-2.4) Dallar kernel tarafından süreç gibi yönetilir Çoklu sürece benzer sorunlar Yavaş Çok Dallı Kernel (Solaris, Linux 2.6) Kullanıcı düzeyi/kernel etkileşimi Etkin çok işlemci/çoklu süreç/çoklu dal Kernel birden fazla işlemciyi kullanır

Çok İşlemci ve Dal Modelleri Dal Modelleri Kullanıcı düzeyi dallar Çok hızlı, basit, kullanıcı kütüphanesi Tek işlemci için ideal Çok işlemciden faydalanamaz Kernel düzeyi dallar (Linux 2.2-2.4) Dallar kernel tarafından süreç gibi yönetilir Çoklu sürece benzer sorunlar Yavaş Çok Dallı Kernel (Solaris, Linux 2.6) Kullanıcı düzeyi/kernel etkileşimi Etkin çok işlemci/çoklu süreç/çoklu dal Kernel birden fazla işlemciyi kullanır

Çok İşlemci ve Dal Modelleri Dal Modelleri Kullanıcı düzeyi dallar Çok hızlı, basit, kullanıcı kütüphanesi Tek işlemci için ideal Çok işlemciden faydalanamaz Kernel düzeyi dallar (Linux 2.2-2.4) Dallar kernel tarafından süreç gibi yönetilir Çoklu sürece benzer sorunlar Yavaş Çok Dallı Kernel (Solaris, Linux 2.6) Kullanıcı düzeyi/kernel etkileşimi Etkin çok işlemci/çoklu süreç/çoklu dal Kernel birden fazla işlemciyi kullanır

Çok İşlemci ve Dal Modelleri Dal Modelleri Kullanıcı düzeyi dallar Çok hızlı, basit, kullanıcı kütüphanesi Tek işlemci için ideal Çok işlemciden faydalanamaz Kernel düzeyi dallar (Linux 2.2-2.4) Dallar kernel tarafından süreç gibi yönetilir Çoklu sürece benzer sorunlar Yavaş Çok Dallı Kernel (Solaris, Linux 2.6) Kullanıcı düzeyi/kernel etkileşimi Etkin çok işlemci/çoklu süreç/çoklu dal Kernel birden fazla işlemciyi kullanır

Neden Çoklu Dal Programlama? Neden Çoklu Dal Programlama? Tek işlemci: I/O yoğun işlemlerde işlemci verimliliği Çok işlemci: Her tür uygulamada paralellik ve verim İki işlemcili SMP sistemler artık dizüstü bilgisayarınızda! 4,8 hatta 16 çekirdek hazır. 64,80,128,160,... Çok yakında!

Neden Çoklu Dal Programlama? Neden Çoklu Dal Programlama? Tek işlemci: I/O yoğun işlemlerde işlemci verimliliği Çok işlemci: Her tür uygulamada paralellik ve verim İki işlemcili SMP sistemler artık dizüstü bilgisayarınızda! 4,8 hatta 16 çekirdek hazır. 64,80,128,160,... Çok yakında!

Neden Çoklu Dal Programlama? Neden Çoklu Dal Programlama? Tek işlemci: I/O yoğun işlemlerde işlemci verimliliği Çok işlemci: Her tür uygulamada paralellik ve verim İki işlemcili SMP sistemler artık dizüstü bilgisayarınızda! 4,8 hatta 16 çekirdek hazır. 64,80,128,160,... Çok yakında!

Neden Çoklu Dal Programlama? Neden Çoklu Dal Programlama? Tek işlemci: I/O yoğun işlemlerde işlemci verimliliği Çok işlemci: Her tür uygulamada paralellik ve verim İki işlemcili SMP sistemler artık dizüstü bilgisayarınızda! 4,8 hatta 16 çekirdek hazır. 64,80,128,160,... Çok yakında!

Neden Çoklu Dal Programlama? Neden Çoklu Dal Programlama? Tek işlemci: I/O yoğun işlemlerde işlemci verimliliği Çok işlemci: Her tür uygulamada paralellik ve verim İki işlemcili SMP sistemler artık dizüstü bilgisayarınızda! 4,8 hatta 16 çekirdek hazır. 64,80,128,160,... Çok yakında!

Çok İşlemci/Çok Çekirdek Çok İşlemci/Çok Çekirdek Symmetric Multi Processor systems Çok Çekirdekli İşlemciler Aynı bellek alanını paylaşan süreç ve dallar İletişim masrafı çok düşük Ön bellek verimliliği hala önemli

POSIX Thread Kütüphanesi POSIX Thread Kütüphanesi Kullanıcı düzeyi kütüphane kernel/kullanıcı etkileşimi Bir süreç birden fazla dal çalıştırabilir Her dal farklı bir işlemcide çalışabilir. Dallar aynı bellek alanına erişebilir Her dalın ayrı bir çalışma zamanı yığıtı vardır.

POSIX Thread Kütüphanesi Dalları yaratma ve Sonlandırma Dalları yaratma ve Sonlandırma pthread create(pthread t * tidp, pthread attr t *attr, void *(*start)(void), void *arg) Yeni bir dal yaratarak belirtecini ilk parametreye koyar, yeni dal start isimli fonksiyonu, arg parametresi ile çağırır pthread exit(void *rval); Bir dal bu çağrıyı yaparak yada başlangıç fonksiyonundan return(rval) yaparak sonlanır. pthread join(pthread t id, void **rval), Başka bir dal sonlanan dalın çıkış değerini almak ve beklemek için çağırır. pthread t pthread self() Dalın kendi belirtecini almasını sağlar

POSIX Thread Kütüphanesi Örnek: Merhaba Dünya Örnek: Merhaba Dünya # include < stdio.h> # include < stdlib.h> # include < pthread.h> void * h e l l o w o r l d ( void * a r g ) { p r i n t f (" Hello, I am: pid %u tid %u \n", g e t p i d (),( unsigned ) p t h r e a d s e l f ()); } int main ( int argc, char * a r g v []) { p t h r e a d t t r [5]; int i, r ; for ( i =0; i <5; i ++) p t h r e a d c r e a t e (& t r [ i ],NULL, h e l l o w o r l d,null); for ( i =0; i <5; i ++) p t h r e a d j o i n ( t r [ i ],NULL); } return 0;

POSIX Thread Kütüphanesi Örnek: Paralel Sıralama Örnek: Paralel Sıralama Böl, bölümleri sırala, birleştir: O ( N P log(n P ) + N) Dağıtık sistemler: O(Nlog(N)) < comm. + O ( N P log(n P ) + N) Merge Sort ya da Quick Sort

POSIX Thread Kütüphanesi Örnek: Paralel Sıralama Sonuçlar...

POSIX Thread Kütüphanesi Senkronizasyon/Mutex Senkronizasyon/Mutex Mutex: karşılıklı dışlama İkili semafor eşleniği Kritik alanlar yaratma int pthread mutex init(pthread mutex t * mutex, pthread mutexattr t *r attr); int pthread mutex destroy(pthread mutex t * mutex); int pthread mutex lock(pthread mutex t *mutex); int pthread mutex trylock(pthread mutex t *mutex); int pthread mutex unlock(pthread mutex t *mutex);

POSIX Thread Kütüphanesi Örnek: Yemek Yiyen Düşünürler Örnek: Yemek Yiyen Düşünürler Düşünürler bir süre düşünüp sonra yiyorlar Yemek için iki çatala birden gerek var Dolayısıyla komşu düşünürler beraber yiyemez Bir süre yedikten sonra iki çalalı da bırakıp düşünmeye başlıyorlar. P2 P3 P1 P4 P0

POSIX Thread Kütüphanesi Örnek: Yemek Yiyen Düşünürler p t h r e a d m u t e x t f o r k s [5]; void p h i l o s o p h e r ( int * i p ) { pthread mutex t * sol,* sag ; int i =* ip, z ; s o l = i ==0? f o r k s +4: f o r k s +( i -1); sag = f o r k s + i ; for ( z =0; z <1000; z ++) { u s l e e p (10000); p t h r e a d m u t e x l o c k ( s o l ); pthread mutex lock ( sag ); p r i n t f (" Philosopher %d is eating %d\n", i, z ); u s l e e p (10000); p r i n t f (" Philosopher %d finished eating %d\n", i, z ); p t h r e a d m u t e x u n l o c k ( s o l ); pthread mutex unlock ( sag ); } } int main () { p t h r e a d t p h i l s [5]; int phids [5]={0,1,2,3,4}, i,n; } for ( i =0; i <5; i ++) { p t h r e a d m u t e x i n i t (&( f o r k s [ i ]),NULL)); for ( i =0; i <5; i ++) { p t h r e a d c r e a t e (&( p h i l s [ i ]), NULL, p h i l o s o p h e r, ( void *) &( p h i d s [ i ])); } for ( i =0; i <5; i ++) { p t h r e a d j o i n ( p h i l s [ i ],NULL); } return 0;

POSIX Thread Kütüphanesi İki Fazlı Kilitleme İki Fazlı Kilitleme Okuma kilitleri paylaşılır, yazma kilitleri diğerlerini dışlar Farklı rollerde çok dal int pthread rwlock init(pthread rwlock t * rwlock,... attr); int pthread rwlock destroy(pthread rwlock t *rwlock); int pthread rwlock rdlock(pthread rwlock t *rwlock); int pthread rwlock wrlock(pthread rwlock t *rwlock); int pthread rwlock unlock(pthread rwlock t *rwlock); int pthread rwlock tryrdlock(pthread rwlock t *rwlock); int pthread rwlock trywrlock(pthread rwlock t *rwlock);

POSIX Thread Kütüphanesi Bekleme ve Sinyalleşme Bekleme ve Sinyalleşme Koşul değişkenleri üzerinde senkronizasyon Dal A: koşul gerçekleşene kadar bekle Dal B: koşulu sağla ve A ya haber ver Koşulu korumak için mutex kullanılır int pthread cond init(pthread cond t * cond,... int pthread cond destroy(pthread cond t *cond); * attr); int pthread cond wait(pthread cond t * cond, pthread mutex t * mutex); int pthread cond timedwait(pthread cond t * cond, pthread mutex t * mutex, const struct timespec * timeout); int pthread cond signal(pthread cond t *cond); int pthread cond broadcast(pthread cond t *cond);

POSIX Thread Kütüphanesi Örnek: Üretici/Tüketici Üretici: Kuyrukta yer varsa veriyi kuyruğa sok, tüketiciye haber ver Kuyruk doluysa boş yer oluncaya kadar bekle Tüketici: Kuyruk boş değilse veriyi kuyruktan al, üreticiye haber ver Kuyruk boşsa veri oluncaya kadar bekle

Özet Özet Çok çekirdek/çok işlemci yaygınlaştıkça çok dallı programlama elzem YBB dışında da paradigma bu tarafa kayıyor. Basit ama denetimi, sorun giderilmesi performans ölçümü zor. Önceden tasarlamak önemli. Teşekkürler Sorular?