elektrik port üyelik servisleri elektrik port üyelik servisleri

Thread Nedir? Thread C'de Nasıl Kullanılır ve Nasıl Yazılır?

Thread’ler sayesinde process’ler aynı anda birden fazla işin yapabilmektedir. Thread’ler aynı anda sadece tek bir işi yerine getirirler. Bir process birden fazla thread’e sahip olabilir. Bu yazımızda C programlama dilinde thread oluşturmaya değineceğiz.



A- A+
15.02.2022 tarihli yazı 8040 kez okunmuştur.
Bir thread, bir process içindeki bir yürütme yoludur. Bir process birden fazla thread içerebilirir, bu yapılara multithreading denir.

Thread, kendi program sayacına, bir stack scope ve bir register set’e sahip olan bir yürütme birimidir. Bir thread’in kendisi bir program değildir; bir thread kendi başına çalışamaz. Bunun yerine, bir program içinde çalışırlar. Aynı process içindeki threadler, birbirleriyle paylaştıkları bellek alanlarında çalışırlar.
 

Neden Multithreading?

Bir thread, lightweight process olarak da bilinir. Threadler çok çekirdekli işlemcilerde farklı çekirdeklerde eş zamanlı olarak çalıştırılabilirler, buna paralel programming denir. Buradaki fikir, bir process’i birden çok thread’e bölerek paralellik elde etmektir. Threadler, aşağıdaki nedenlerden dolayı processlerden daha hızlı çalışır:
 
► Thread oluşturmak çok hızlıdır.
► Threadler arasında bağlam değişimi çok hızlıdır.
► Threadler kolayca sonlandırılabilirler.
► Threadler arası iletişim daha hızlıdır.


C’de Thread/Multithreading Yazmak

Linux/Unix işletim sistemini kullanarak örneklerimizi gerçekleştireceğiz. Kodlarımızı yazdığımız ide ise eclipse’dir. #include <pthread.h> kütüphanesini kullanacağız.
 
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
void *worker_thread(void *arg)
{
        printf("This is worker_thread()\n");
        return NULL;
}
int main()
{
        pthread_t my_thread;
        int ret;
        printf("In main: creating thread\n");
        ret = pthread_create(&my_thread, NULL, &worker_thread, NULL);
   if(ret != 0) {
                printf("Error: pthread_create() failed\n");
        }
        pthread_join(my_thread, NULL);
        return 0;
}

Kodda main thread, work_thread() yürütmek için ikinci bir thread’i oluşturacaktır. Main()’de, sistemdeki thread’i tanımlamak için kullanılan, bir tam sayı olan pthread_t türünde my_thread adında bir değişken bildirdik. my_thread bildirildikten sonra, bir thread oluşturmak için pthread_create() fonksiyonunu çağırırız. pthread_create() 4 tane bağımsız değişken alır. İlk argüman, bu fonksiyon tarafından ayarlanan my_thread için bir pointerdir. İkinci argüman nitelikleri belirtir. Değer NULL ise, varsayılan öznitelikler kullanılacaktır. Üçüncü argüman, oluşturulacak thread için yürütülecek fonksiyonun adıdır. Dördüncü argüman, work_thread fonksiyonuna argümanları iletmek için kullanılır. Thread’ler için pthread_join() fonksiyonu, işlemler için wait() işlevine eşdeğerdir. pthread_join'e yapılan bir çağrı, ilk argümana eşit tanımlayıcıya sahip thread sona erene kadar çağıran thread’i engeller.


Ekran Çıktısı:




Başka bir örnek daha yapacak olacak olursak: Bu örnekte 5 tane thread oluşturalım.
 
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define N 5
void *worker_thread(void *arg)
{
        printf("This is worker_thread #%ld\n", (long)arg);
        return NULL;
}
int main()
{
        pthread_t my_thread[N];
        long id;
   int ret;
        printf("In main: creating thread\n");
        for(id = 1; id <= N; id++) {
                ret =  pthread_create(&my_thread[id], NULL, worker_thread, (void*)id);
                if(ret != 0) {
                        printf("Error: pthread_create() failed\n");
                }
        }
        for(id = 1; id <= N; id++) {
pthread_join(my_thread[id], NULL);
  }
        return 0;
}


Ekran Çıktısı:



Kaynak:

geeksforgeeks.org
afteracademy.com
iitk.ac.in
bogotobogo.com


Aktif etkinlik bulunmamaktadır.
ANKET
Endüstri 4.0 için En Hazır Sektör Hangisidir

Sonuçlar