crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Multi-threading: İşlemci Gücünü Paylaştırmak
Multi-threading, bir programın (process) içinde aynı anda çalışan birden fazla iş parçacığı (thread) oluşturmaktır. Bu, ağır hesaplamaların arka planda yapılması veya kullanıcı arayüzünün donmadan çalışmaya devam etmesi için hayati önem taşır.
1. std::thread Kullanımı: İlk İş Parçacığı
Bir thread oluşturmak için <thread> kütüphanesini eklemeniz ve thread'e çalıştıracağı bir fonksiyon (veya lambda) vermeniz yeterlidir.
C++:
#include <iostream>
#include <thread>
void gorev(int id) {
std::cout << "Thread " << id << " calisiyor..." << std::endl;
}
int main() {
// Yeni bir thread olustur ve gorev'i baslat
std::thread t1(gorev, 1);
std::thread t2(gorev, 2);
// Ana thread'in t1 ve t2'nin bitmesini beklemesi saglanir
t1.join();
t2.join();
std::cout << "Tum isler bitti." << std::endl;
return 0;
}
2. Join vs. Detach: Thread'i Yönetmek
Bir thread başlattığınızda, programın ana akışının bu thread ile nasıl etkileşime gireceğini seçmelisiniz:
join(): "Seni bekliyorum." Ana program, bu thread işini bitirene kadar durur. Eğer join yapmazsanız ve program biterse, uygulama çöker.
detach(): "Sen kendi yoluna git." Thread ana programdan ayrılır ve arka planda bağımsız çalışır. Genellikle log tutma gibi arka plan servisleri için kullanılır.
3. Veri Yarışı (Race Condition) ve Mutex
Birden fazla thread aynı anda aynı değişkeni değiştirmeye çalışırsa veri bozulması (Race Condition) oluşur. Bunu engellemek için std::mutex (Mutual Exclusion) kullanılır. Mutex, bir kaynağı bir thread kullanırken diğerlerinin kapıda beklemesini sağlayan bir "anahtar" gibidir.
C++:
#include <mutex>
int sayac = 0;
std::mutex mtx;
void artir() {
mtx.lock(); // Kapıyı kilitle
sayac++;
mtx.unlock(); // Kapıyı aç
}
Modern İpucu: lock() ve unlock() işlemlerini manuel yapmak tehlikelidir (hata anında kilit açık kalabilir). Bunun yerine, kapsam dışına çıkınca otomatik kilit açan std::lock_guard kullanın.
4. Multi-threading Karşılaştırması
| Durum | Single-Thread (Tekli) | Multi-Thread (Paralel) |
|---|---|---|
| Hız | Sıralı (Yavaş). | Eşzamanlı (Çok Hızlı). |
| Karmaşıklık | Düşük. | Yüksek (Hata yapmaya açık). |
| Kaynak Kullanımı | Az. | Fazla (CPU ve RAM). |
Sonuç
Paralel programlama, C++'ın en güçlü ama "en tehlikeli" kısımlarından biridir. Doğru kullanıldığında performansı katlar, yanlış kullanıldığında ise takibi imkansız olan "Heisenbug"lara (sadece bazen ortaya çıkan hatalar) yol açar. Her zaman mutex kullanımına, thread güvenliğine (thread-safety) ve deadlock (karşılıklı bekleme) durumlarına dikkat etmelisiniz.