Ö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
#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
#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 |