C
Özet - pthread
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);.
Örnek çözümü göster
#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;
}
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.
Kendini test et
-
Üretici-tüketici deseni hangi üçlüyle kurulur?
- fork, exec, wait
- open, read, write
- signal, kill, raise
- mutex, cond, join
Cevabı göster
mutex, cond, join — mutex korur, cond haber verir, join bekler.
-
pthread araçlarını eşle
- pthread_create
- İş parçacığı oluştur
- pthread_mutex
- Paylaşılan veriyi koru
- pthread_cond
- Haberi ver
- pthread_join
- Bekle ve topla
Sıradaki ders: Soket nedir?