CodeBlanks Logo Icon CodeBlanks

Özet - pthread

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

create, mutex ve cond'u birleştirerek bir üretici-tüketici yazarsın.

Üretici-tüketici birleştirme

Bu grupta pthread'in temel araçlarını öğrendin: pthread_create ile oluştur, pthread_mutex ile koru, pthread_cond ile haber ver ve pthread_join ile bekle. Üçü birlikte eşzamanlı sistem kurar.

Şimdi bunları birleştirerek bir üretici-tüketici yazacaksın: mutex ile paylaşılan veriyi koru, koşul değişkeni ile üretici ve tüketiciyi eşzamanla. Bu desen, kuyruk sistemlerinin temelidir.

Uygulama Üretici-tüketici

int items = 0;, pthread_mutex_t lock; ve pthread_cond_t cond;. void *producer(void *arg): pthread_mutex_lock(&lock); items = 5; pthread_cond_signal(&cond); pthread_mutex_unlock(&lock);. void *consumer(void *arg): pthread_mutex_lock(&lock); while (items == 0) pthread_cond_wait(&cond, &lock); pthread_mutex_unlock(&lock);. İkisini oluştur, join et ve printf("öğe=%d\n", items);.

Başlangıç kodu

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

int items = 0;
pthread_mutex_t lock;
pthread_cond_t cond;

// producer ve consumer yaz
// mutex ile koru, cond ile eşzamanla
// items'ı yazdır

int main(void) {
    return 0;
}

Örnek çözüm

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

int items = 0;
pthread_mutex_t lock;
pthread_cond_t cond;

void *producer(void *arg) {
    pthread_mutex_lock(&lock);
    items = 5;
    pthread_cond_signal(&cond);
    pthread_mutex_unlock(&lock);
    return NULL;
}

void *consumer(void *arg) {
    pthread_mutex_lock(&lock);
    while (items == 0) {
        pthread_cond_wait(&cond, &lock);
    }
    pthread_mutex_unlock(&lock);
    return NULL;
}

int main(void) {
    pthread_mutex_init(&lock, NULL);
    pthread_cond_init(&cond, NULL);
    pthread_t tp, tc;
    pthread_create(&tc, NULL, consumer, NULL);
    pthread_create(&tp, NULL, producer, NULL);
    pthread_join(tp, NULL);
    pthread_join(tc, NULL);
    printf("öğe=%d\n", items);
    return 0;
}

Beklenen çıktı

öğe=5

Sonraki adımlar

Çoklu iş parçacığını öğrendin. Sonraki gruplarda soket programlama ile ağ iletişimini göreceksin.

İş parçacıkları ve soketler birlikte çalışır: her istemci için bir iş parçacığı oluşturulur. Mutex paylaşılan durumu, koşul değişkeni ise bağlantı kuyruğunu korur. read ve write çağrıları hem tanıtıcılar hem soketler için aynıdır. Bu temeller, gerçek dünya sunucularının çekirdeğidir.

Soru ve cevaplar

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

1 Üretici-tüketici deseni hangi üçlüyle kurulur?

  • fork, exec, wait
  • open, read, write
  • signal, kill, raise
  • mutex, cond, join Doğru cevap

Açıklama: mutex korur, cond haber verir, join bekler.

2 pthread araçlarını eşle

Kavram Anlamı
pthread_create İş parçacığı oluştur
pthread_mutex Paylaşılan veriyi koru
pthread_cond Haberi ver
pthread_join Bekle ve topla

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