C
Süreç ve thread
fork ve pthread ile paralel işleme yazarsın.
Süreç ve thread
Bu derste worker_init işlevini tanımlayacaksın. pthread ile bir iş parçacığı başlatır, pthread_join ile beklersin. İş parçacığı worker_count değişkenini mutex koruması altında artırır.
Bu, projenin paralellik katmanıdır. pthread_create(&t, NULL, worker_fn, NULL) ile iş parçacığı oluşturulur; pthread_join(t, NULL) ile bitmesi beklenir. worker_fn içinde mutex kilitlenir, sayaç artırılır, mutex açılır. Bu desen, ileride gerçek bir sunucunun her istemciye bir iş parçacığı açmasının temelidir.
worker_init gövdesi
İşçi işlevi void *worker_fn(void *arg): mutex'i kilitler, worker_count++ yapar, mutex'i açar. (void)arg; ile kullanılmayan parametre uyarısını bastırırız.
int worker_init(void): pthread_t t; tanımla, pthread_create(&t, NULL, worker_fn, NULL) ile thread başlat, pthread_join(t, NULL) ile bekle, return 1;. Main'de worker_init(); çağır ve printf("sayaç: %d\n", worker_count);. Çıktı: "Proje hazır" sonra "sayaç: 1". Önceki dersin main'i bu dersin başlangıç koduna dahil edilir.
Uygulama worker_init'i ekle
void *worker_fn(void *arg) yaz: (void)arg;, pthread_mutex_lock(&worker_lock);, worker_count++;, pthread_mutex_unlock(&worker_lock);, return NULL;. int worker_init(void) yaz: pthread_t t;, pthread_create(&t, NULL, worker_fn, NULL);, pthread_join(t, NULL);, return 1;. main'e worker_init(); ve printf("sayaç: %d\n", worker_count); ekle.
Örnek çözümü göster
#include <stdio.h>
#include <pthread.h>
int worker_init(void);
int server_setup(void);
int ipc_setup(void);
int worker_count = 0;
pthread_mutex_t worker_lock = PTHREAD_MUTEX_INITIALIZER;
void *worker_fn(void *arg) {
(void)arg;
pthread_mutex_lock(&worker_lock);
worker_count++;
pthread_mutex_unlock(&worker_lock);
return NULL;
}
int worker_init(void) {
pthread_t t;
pthread_create(&t, NULL, worker_fn, NULL);
pthread_join(t, NULL);
return 1;
}
int main(void) {
printf("Proje hazır\n");
worker_init();
printf("sayaç: %d\n", worker_count);
return 0;
}
Kendini test et
-
pthread kavramlarını eşle
- pthread_create
- Thread başlatır
- pthread_join
- Thread bekler
- pthread_mutex_lock
- Kilit alır
- worker_count
- Sayaç
-
pthread_join ne yapar?
- Thread oluşturur
- Thread öldürür
- Thread askıya alır
- Thread bekler
Cevabı göster
Thread bekler — pthread_join thread bitene kadar bekler.
-
pthread_create çağrısı
pthread_create(&t, NULL, worker_fn, ____);
Cevabı göster
pthread_create(&t, NULL, worker_fn, NULL);
Sıradaki ders: Soket katmanı