Multithreading | std::thread - 1

İşletim sistemleri terminolojisinde çalışmakta olan programlara process denilmektedir. Thread'ler için lightweight process'ler denilmektedir. Thread'ler process'lerin farklı çizelgelenen akışlarıdır. İşletim sistemi tüm process'lerin thread'lerini bir çizelgede tutmakta ve bunları zaman paylaşımlı olarak çalıştırılmaktadır. Bir thread biraz çalıştırılmakta sonra çalışmasına ara verilmektedir. Başka bir thread kalınan yerden çalışmaya devam ettirilmektedir. Bir process'in thread 'leri için Stack ve Register değerleri/alanları farklı; Heap, Code, Data ve Files değerleri/alanları ise ortaktır.


C++11 ile gelen std::thread ile multithreading programlama olanakları artmıştır. Aşağıda C++11 ile gelen sınıfın üye fonksiyonları ve diğer özellikler listelenmiştir.


Aşağıda basit bir thread uygulaması yapılmış ve yapılmak istenen işlemler threadler üzerinden yapılmaya çalışılmıştır. Burada join işlemini unutmamız sistemin hata vererek sonlanmasıa neden olacaktır.


Aşağıdaki thread uygulaması ise yapılacak işlemler lambdalar ve functor'lar ile thread'ler üzerinden yapılmaya çalışılmıştır.


Aşağıdaki thread uygulamasında ise fonksiyonlar ve functor'lar ile thread'ler üzerinden parametrelerin nasıl aktarılacağı anlatılmıştır.


Aşağıdaki thread uygulamasında ise thread'ler üzerinden referans yoluyla parametrelerin nasıl aktarılacağı anlatılmaya çalışılmıştır.


Yukarıdaki kodu derleyip çalıştırdığımızda ival değerinin thread tarafından değiştirilmiş olduğunu görebiliriz.


Burada dikkat edilmesi gereken nokta std::ref() fonksiyonunun kullanılmaması aşağıdaki gibi bir hatanın çıkmasına yol açmaktadır. Fonksiyon parametre olarak bir referans istiyor ve bu sağlanmazsa hatayla karşılaşılıyor.


Aşağıdaki thread örneğinde ise bir sınıfın üye fonksiyonunun thread tarafından nasıl çağrılacağına ilişkin örnek kullanım biçimi işlenmiştir.