CodeBlanks Logo Icon CodeBlanks

pthread_mutex

  • C kursu
  • İleri seviye
  • Ders 21/83
  • 5 dk

pthread_mutex ile karşılıklı dışlama öğrenirsin.

pthread_mutex

Mutex (mutual exclusion), paylaşılan veriye erişimi sıraya koyan bir kilittir. Aynı anda yalnızca bir iş parçacığı kilitli bölgeye girer.

Önce pthread_mutex_t lock; tanımla ve pthread_mutex_init(&lock, NULL) ile başlat. Kritik bölge öncesi pthread_mutex_lock(&lock), sonrası pthread_mutex_unlock(&lock). Aradaki kod yalnızca bir iş parçacığı tarafından çalıştırılır. İş bitince pthread_mutex_destroy(&lock) ile temizle.

Kritik bölge

Kritik bölge, paylaşılan veriye erişen kod parçasıdır. Birden çok iş parçacığı aynı anda buraya girerse veri yarışı (data race) oluşur; sonuç tahmin edilemez.

Örneğin counter++ aslında oku-artır-yaz adımlarından oluşur. İki iş parçacığı arka arkaya girerse biri ezilebilir. Mutex ile bölgeyi kilitlersin: lock, counter artır, unlock. Böylece her artırma tam ve sıralı olur.

Uygulama İki iş parçacığı ile sayaç

int counter = 0; ve pthread_mutex_t lock; global tanımla. void *worker(void *arg) yaz; içinde pthread_mutex_lock(&lock); counter++; pthread_mutex_unlock(&lock);. pthread_mutex_init(&lock, NULL); ile başlat. İki iş parçacığı oluştur, join et ve printf("sayaç=%d\n", counter);.

Başlangıç kodu

main.c
#include <stdio.h>
#include <pthread.h>

int counter = 0;
pthread_mutex_t lock;

// worker işlevini yaz (mutex ile koru)
// iki iş parçacığı oluştur ve bekle
// counter'ı yazdır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <pthread.h>

int counter = 0;
pthread_mutex_t lock;

void *worker(void *arg) {
    pthread_mutex_lock(&lock);
    counter++;
    pthread_mutex_unlock(&lock);
    return NULL;
}

int main(void) {
    pthread_mutex_init(&lock, NULL);
    pthread_t t1, t2;
    pthread_create(&t1, NULL, worker, NULL);
    pthread_create(&t2, NULL, worker, NULL);
    pthread_join(t1, NULL);
    pthread_join(t2, NULL);
    printf("sayaç=%d\n", counter);
    return 0;
}

Beklenen çıktı

sayaç=2

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Mutex kilidi

Soru
pthread_mutex_____(&lock);
Cevap
pthread_mutex_lock(&lock);

Açıklama: pthread_mutex_lock kilidi alır.

2 Mutex fonksiyonlarını eşle

Kavram Anlamı
pthread_mutex_lock Kilidi alır
pthread_mutex_unlock Kilidi bırakır
pthread_mutex_init Kilidi başlatır
critical section Kritik bölge

3 Mutex ne için kullanılır?

  • Kritik bölgeyi korumak Doğru cevap
  • İş parçacığı oluşturmak
  • Sinyal göndermek
  • Bellek ayırmak

Açıklama: Mutex, kritik bölgeyi korur ve veri yarışını önler.

İleri seviye bölümündeki tüm dersler