Multi-threading in C

Multi-threading ဆိုတာဘာလဲ...
ပုံမှန်ဆိုရင်ကျွန်တော်တို့ရေးလိုက်တဲ့ Program တိုင်းက process တွေိကိုတစ်ခုပြီးမှ နောက်တစ်ခုကိုလုပ်ဆောင်ပါတယ် သို့ပေမယ့်တကယ့်လက်တွေ့မှာအဲ့သလိုမျိုးကအဆင်မြေပပါဘူး

Video player တစ်ခုရဲ့လုပ်ဆောင်ချက်ကိုတွေးကြည့်မယ်ဆို video display (output) လုပ်ပေးနေသလို user contorl (input) ကိုလဲ့စောင့်နေပါတယ်.....
Python မှာဆိုရင်တော့ကျွန်တော်တို့ thread ဆိုတဲ့ကောင်ရှိသလိုပဲ C မှာလဲ POSIX thread library / pthread ဆိုတာရှိပါတယ်။
အောက်ကေကာင်ကိုတချက်လေ့လာကြည့်ပါ...

#include <stdio.h>
#include <pthread.h>

void *function1(void *a)  
{
    int i = 0;
    for (i = 0; i < 4; i++) {
        sleep(1);
        puts("Hello");
    }
    return NULL;
}

void *function2(void *a)  
{
    int i = 0;
    for (i = 0; i < 4; i++) {
        sleep(1);
        puts("MSF");
    }
    return NULL;
}

int main()  
{
    pthread_t t0;
    pthread_t t1;
    pthread_create(&t0, NULL, function1, NULL);
    pthread_create(&t1, NULL, function2, NULL);

    void* results;
    pthread_join(t0, &results);
    pthread_join(t1, &results);
    return 0;
}

Multithreading လုပ်ဆောင်ဖို့ C မှာ pthread.h ဆိုတဲ့ header ကိုထည့်ပေးဖို့လိုပါတယ်...

#include <pthread.h>

နောက်ကျွန်တော်ကေတာ့ print ပြန်ထုတ်ပေးတဲ့ function လေး၂ခုကို for loop နဲ့ပတ်ရေးလိုက်ပါတယ်.. (function1, function2) ပုံမှန်ဆိုကျွန်တော်တို့က function1 ကိုအရင်အလုပ်လုပ်မယ် ပြီးမှ function2 ကိုလုပ်မယ် ပြောရရင် Hello ဆိုတာအရင် ၄ခါအရင် ပြမယ် ပြီးမှ MSF ဆိုတာပြမယ်ပေါ့... အခုကျ multithreading သုံးပြီး၂ခုလုံးကိုပြိုင်တူ လုပ်ခိုင်းမှာပေါ့... main() function လေးကိုတစ်ချက် ကြည့်ရေအာင်

pthread_t t0;  
pthread_t t1;  

pthread_t <threadname> နဲ့ကိုယ်လုပ်ချင်သေလက် thread name တွေလုပ်လို့ရပါတယ်.. ကျွန်တော်ကေတာ့ အေပါ်က function ၂ခုအတွက် thread name ၂ခုလုပ်လိုက်ပါတယ်

pthread_create(&t0, NULL, function1, NULL);  
pthread_create(&t1, NULL, function2, NULL);  

pthread_create နဲ့ thread create လုပ်ပါတယ်.. အောက်ကေကာင်လေးကိုမှတ်ထားပါ
pthread_create(thread_name, NULL, function_name, NULL)
ပထမေနရာမှခုနက create လုပ်ခဲ့တဲ့ thread name ကိုထည့်ပါနောက် တတိယေကာင်မှာ ကိုယ်ခေါ်မယ့် function ကိုထည့်ပါ... ဒါပဲလားဆိုမြပီးသေးဘူး ကျန်သေးတယ်

void* results;  
pthread_join(t0, &results);  
pthread_join(t1, &results);  

ပထမလိုင်းက function တွေက return ပြန်လာတဲ့ကောင်တွေကိုသိမ်းထားပေးမယ့်ကောင်ပါ. နောက် thread တွေပြီးတဲ့အထိစောင့်ဖို့အတွက် pthreadjoin() ကိုသုံးရပါမယ်... pthreadjoin က thread function က return ပြန်လာတဲ့ value ကိုယူပြီးစောနက create လုပ်ထားတဲ့ void pointer variable မှာသွားသိမ်းပေးပါတယ်....

Coding အတွက်ကဒီလောက်ပါပဲ compiler လုပ်တဲ့အခါကျရင်သာအောက်ကလို pthread library နဲ့ချိတ်ပေးလိုက်ပါ

gcc .c -lpthread -o run  

Img1

Download Markdown version of the post