Sistem Programlama'da Thread (İplik) Kavramı ve İşlemleri [Video]

İplikler hafif proses olarak adlandırılırlar. Prosesler gibi çalışırlar ama proseslere göre belli başlı farkları vardır. Ona da farklı bir başlık altında değineceğim. Türkçesi iplik olan bu hafif prosesler, ingilizce ifadesi olan Thread olarak da geçer bazı kitaplarda veya web sitelerinde.

İplikler, tek bir prosesin daha çok işlem yapmasına olanak tanırlar. Bilgisayar belleğinde fazladan alan işgal etmezler. Belli bir alana sahip proseslerin içinde çalışırlar. Bir proses bir ipliğe sahip olabileceği gibi birden fazla ipliğe de sahip olabilir.




İplikler kolay oluşturulup kolay yok edilirler.  Bir program yazarken, programın mevcut prosesi içinde bir iplik yaratıp birden çok işlem yapmak istiyorsanız eğer, derleyicinize;

#include <pthread.h>

kütüphanesini eklemeniz gerekiyor.

Threadler yani iplikler ile işlemler yaparken bazı ifadeleri bilmeniz gerekiyor. İplikler ile işlem yaparken bu ifadeler olmazsa olmaz ifadelerdir. Programı yazmaya başladığınız zaman main kısmında öncelikli olarak yapacağınız işlemlerdir. Kısacası bu ifadeler iplik işlemlerinin demirbaş işlemleridir.

pthread_t()

İpliklere ait bilgileri tutar. Bir ipliğin sahip olması gereken tüm özellikler bu ifade ile tanımlanmış olan ifadede saklanır.

pthread_create() :

 Bu ifade ile yeni bir iplik oluşturulur. 4 farklı parametre alır.
1. parametresi : İpliğe ait bilgileri tutan değişkenin adresini tutar.
2. parametresi : İpliğin özelliklerini tutar. Yapacağımız örneklerde NULL olarak kalacak.
3. parametresi : İpliğe ait olan fonksiyonun adını tutar.
4. parametresi : İpliğimize ait olan fonksiyona değer döndereceksek eğer, 4. parametre kısmı kullanılır. Bu parametre için unutmamanız gereken en önemli özellik ise, bu parametre sadece void değerler alır. Eğer ki farklı türdeki değerler yollayacaksanız fonksiyona, ilk önce (void *)x işlemi yaparak değerinizi void türüne dönüştürmeniz gerekiyor. Videolarda bunu daha iyi anlayacaksınız zaten.

pthread_join() 

"İpliğin işlemini bitirmesini bekle" anlamına gelir. Eğer iplik kullanarak bir program yazacaksanız bu ifade olmazsa olmaz bir ifadedir. Bu ifade sayesinde iplik işini bitirmeden proses sonlanmaz. Bu ifade 2 parametre alır.

1. paremetresi : İpliğe ait bilgileri tutan değişkenin kendisini tutar.
2. parametresi : Geri dönüş değerlerini tutar. Eğer ipliğinizin geri dönüş değeri var ise, ikinci parametre bu veriyi tutar. Yarattığınız thread geriye değer döndermiyor ise eğer, bu parametreye NULL yazılır.

pthread_exit()

İçine void değerler alır. İpliğin geri dönüş değerini tutarlar. Geri dönüş değeri yok ise içine NULL yazılır.


İplikler nedir, nasıl çalışırlar, iplik oluşturup çeşitli işlemler nasıl yapılır? Bütün bunları daha iyi anlamanız açısından iplikler ile ilgili 4 tane örnek video çektim.

1. Örnek : Bu örnek basit bir thread örneğidir. İpliklere değer gönderme falan yok. Basit olarak threadlerin genel yapısını görmenizi sağlayacak bir örnektir. Örnekte her fonksiyonu bir iplik olarak düşüneceğiz.



2. Örnek :  Bu örneğin bir öncekinden farkı, bu sefer ipliğimize değer gönderiyoruz. Yine önceki örnekte olduğu gibi her fonksiyonu bir thread olarak düşünecez.



3. Örnek : Artık örneklerimizin gelişmişlik düzeyi giderek artıyor. Bu videoda Thread'lerin değer döndermesini göreceğiz. pthread_join() ifadesinin nasıl kullanıldığını göreceksiniz. Her fonksiyon bir thread olarak düşünülecek.



4. Örnek : Diğer 3 örneğe göre en gelişmiş olan örnektir. Bu örnekte bir yapı kullanacağız. Kullanacağımız bu yapı sayesinde bir Thread'e (ipliğe) birden çok veri gönderebileceğiz ve oluşturacağımız her iki Thread, tek bir fonksiyonu kullanacaktır. Üstelik de ipliğimiz değer dönderen bir iplik olacaktır.