pthread_create
- C kursu
- İleri seviye
- Ders 19/83
- 5 dk
pthread_create ile iş parçacığı oluşturmayı öğrenirsin.
pthread_create
pthread_create, yeni bir iş parçacığı oluşturur. Dört parametre alır: iş parçacığı kimliği, öznitelikler, başlangıç işlevi ve işleve geçirilecek argüman.
İşlev imzası void *(*start)(void *) olmalıdır; yani void * alıp void * döndürür. Örneğin pthread_create(&tid, NULL, worker, &value), worker işlevini yeni iş parçacığında çalıştırır. NULL öznitelikler varsayılan ayarları kullanır. İş parçacığı oluşturulur oluşturulmaz çalışmaya başlar.
İş parçacığı yaşam döngüsü
Bir iş parçacığı oluşturulduğunda çalışmaya başlar ve işlevi dönene kadar yaşar. İşlev döndüğünde iş parçacığı biter.
Bitişini beklemek için pthread_join(tid, NULL) kullanırsın. Bu, iş parçacığı dönene kadar bekler ve kaynakları serbest bırakır. Her oluşturulan iş parçacığı için join çağırmak iyi bir alışkanlıktır; ayrıntısını sonraki derste göreceksin. İş parçacığı, ebeveyn iş parçacığıyla aynı belleği paylaşır.
Uygulama İş parçacığı oluştur ve bekle
void *worker(void *arg) yaz; içinde int *value = (int *)arg; *value = 42;. int value = 0; ile değişken tanımla. pthread_create(&tid, NULL, worker, &value); ve pthread_join(tid, NULL);. printf("değer=%d\n", value); ile yazdır.
Başlangıç kodu
#include <stdio.h>
#include <pthread.h>
// worker işlevini yaz
// pthread_create ile oluştur
// pthread_join ile bekle ve yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
#include <pthread.h>
void *worker(void *arg) {
int *value = (int *)arg;
*value = 42;
return NULL;
}
int main(void) {
pthread_t tid;
int value = 0;
pthread_create(&tid, NULL, worker, &value);
pthread_join(tid, NULL);
printf("değer=%d\n", value);
return 0;
}Beklenen çıktı
değer=42
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 pthread_create'in üçüncü parametresi nedir?
- Öznitelikler
- İş parçacığı kimliği
- Başlangıç işlevi Doğru cevap
- Dönüş değeri
Açıklama: Üçüncü parametre başlangıç işlevidir.
2 İş parçacığı oluşturma
pthread_create(&tid, NULL, ____, &value);
pthread_create(&tid, NULL, worker, &value);
Açıklama: worker işlevi yeni iş parçacığında çalışır.
3 pthread_create parçalarını eşle
| Kavram | Anlamı |
|---|---|
pthread_create |
İş parçacığı başlatır |
pthread_join |
Bitmesini bekler |
NULL |
Varsayılan öznitelik |
void * |
Argüman ve dönüş türü |