C’de eşzamanlılık: POSIX iş parçacıkları
pthread ile işleri paralel yürütür, yarış durumu ve kilitlenmeyi önler, atomikleri ve iş parçacığı havuzlarını doğru kullanırsın.
Seviye 401 · 17 ders · 15 pratik lab
Dersler
İş parçacıkları
- İş parçacığı ve süreç: ortak bellek, ayrı yığın
- pthread_create ve pthread_join
- İş parçacığına veri vermek ve sonuç almak
- İş parçacığına özel veri: _Thread_local
- Kısa görev: büyük diziyi paralel topla
Eşitleme
- Yarış durumu: hatayı görünür kılmak
- Karşılıklı dışlama: pthread_mutex
- Kilitlenme: nedenleri ve kilit sırası
- Koşul değişkenleri ve üretici-tüketici
- Okuma-yazma kilitleri ve semaforlar
- Kısa görev: sınırlı ve iş parçacığı güvenli kuyruk
Atomikler ve araçlar
- C11 atomikleri ve bellek sıralaması
- Kilitsiz sayaç ve ABA sorunu
- ThreadSanitizer ve Helgrind ile yarış bulmak
- İş parçacığı havuzu tasarlamak
- Kısa görev: yarışı bul, düzelt ve düzeltmeyi kanıtla
Bitirme
- Bitirme görevi: iş parçacığı havuzlu dosya özetleyici
Pratik lablar
- Dizinin en büyüğünü paralel bulmak: Bir diziyi dört iş parçacığına bölüp her birinin bulduğu en büyük değeri pthread_join ile toplayan programı yaz.
- İş parçacığı argümanının ömrünü düzeltmek: Döngü değişkeninin adresini iş parçacıklarına geçiren ve rastgele yanlış sonuç veren kodu düzelt.
- İş parçacığına özel hata tamponu: Global hata mesajı tamponunu _Thread_local yap ve iş parçacıklarının birbirinin mesajını ezmediğini test et.
- Paylaşılan toplamı mutex ile korumak: Birden çok iş parçacığının artırdığı ödeme toplamına mutex ekle ve sonucun her çalıştırmada aynı olduğunu göster.
- Kilit sırasıyla kilitlenmeyi önlemek: İki hesap arasında karşılıklı transfer yaparken kilitlenen kodu tutarlı kilit sırasıyla düzelt.
- trylock ve geri çekilmeyle kaynak almak: Üç kaynağı birden kilitlemesi gereken işçileri trylock ve rastgele geri çekilme ile kilitlenmeden çalıştır.
- Koşul değişkeniyle hazır sinyali: İşçilerin ayarlar yüklenene kadar beklediği kodu meşgul döngü yerine koşul değişkeniyle yaz.
- Sahte uyanmaya dayanıklı bekleme: pthread_cond_wait'i if ile kullanan kuyruğu while döngüsüne çevir ve yüklü testte boş kuyruktan okuma olmasın.
- Okuma ağırlıklı tabloyu rwlock ile korumak: Sık okunan, nadiren güncellenen yönlendirme tablosunu mutex yerine pthread_rwlock ile koru ve süreyi karşılaştır.
- İş parçacığı havuzunu düzgün kapatmak: Kuyruktaki işleri bitirip tüm işçileri sızıntısız sonlandıran bir kapatma fonksiyonu yaz.
- C11 atomik sayaçla istatistik tutmak: İstek sayacını mutex yerine atomic_fetch_add ile tut ve sonucun doğru olduğunu yüklü testle göster.
- Gizli yarış koşulunu TSan ile bulmak: Testleri genelde geçen bir önbellekte ThreadSanitizer'ın raporladığı yarışı bul ve düzelt.
- Release ve acquire ile veri yayınlamak: relaxed sırayla bayrak kuran üretici-tüketici kodunu release/acquire ile düzelt ve nedenini yorumda açıkla.
- Helgrind raporuyla kilit hatası onarmak: Helgrind'in kilit sırası ihlali raporunu yorumla, ilgili kodu düzelt ve raporun temizlendiğini göster.
- Ayar yapısını okuyucu kilidiyle korumak: Birçok iş parçacığının okuduğu, birinin ara sıra güncellediği ayar yapısını pthread_rwlock ile koru ve yarım okunan değer kalmadığını testle göster.
Kurs hakkında
pthread ile işleri paralel yürütür, yarış durumu ve kilitlenmeyi önler, atomikleri ve iş parçacığı havuzlarını doğru kullanırsın.
Ne öğreneceksin
- İş parçacıkları
- Eşitleme
- Atomikler ve araçlar
- Bitirme
Ön koşullar
Aynı yolun 301 düzeyine kadar olan konularını uygulamış olmalısın.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 401 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.