08 December 2014

Mengenal Linux Thread

Thread ID direpresentasikan dengan tipe 'pthread_t'. Tipe ini adalah tipe struktur sehingga harus ada fungsi yg membandingkan dua thread ID.
#include<pthread.h>
int pthread_equal(pthread_t tid1, pthread_t tid2);
Fungsi ini membutuhkan dua thread ID dan mengembalikan nilai tidak nol jika kedua thread ID adalah sama besar atau selain itu ia akan mengembalikan nilai nol.

Kasus lain muncul ketika sebuah thread ingin mengetahui thread IDnya itu sendiri. Untuk kasus ini kita membutuhkan fungsi di bawah ini.
                #include <pthread.h>
pthread_t pthread_self(void);
Fungsi p_thread_self() digunakan untuk mencetak thread ID itu sendiri.

Normalnya ketika program dijalankan dan menjadi sebuah proses akan membutuhkan setidaknya satu thread untuk mengontrol. Sebuah proses dapat membuat ekstra hread dengan menggunakan fungsi di bawah ini.
int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void), void *restrict arg)

Contoh penggunaan tiga fungsi thread di atas
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>

pthread_t tid[2];

void* doSomeThing(void *arg)
{
    unsigned long i = 0;
    pthread_t id = pthread_self();

    if(pthread_equal(id,tid[0]))
    {
        printf("\n First thread processing\n");
    }
    else
    {
        printf("\n Second thread processing\n");
    }

    for(i=0; i<(0xFFFFFFFF);i++);

    return NULL;
}

int main(void)
{
    int i = 0;
    int err;

    while(i < 2)
    {
        err = pthread_create(&(tid[i]), NULL, &doSomeThing, NULL);
        if (err != 0)
            printf("\ncan't create thread :[%s]", strerror(err));
        else
            printf("\n Thread created successfully\n");

        i++;
    }

    sleep(5);
    return 0;
}

Kodingan ini melakukan:
1.       Menggunakan fungsi pthread_create() untuk membuat dua thread
2.       Fungsi permulaian digunakan unuk membuat kedua thread sama besar
3.       Di dalam dungsi ‘doSomeThing()’, thread tsb menggunakan fungsi pthread_self() dan pthread_equal() untuk mengeksekusi thread mana yg menjadi pertama atau thread kedua yg dibuat

Ketika dijalankan, kodingan ini akan menghasilkan output:
$ ./threads
Thread created successfully
First thread processing
Thread created successfully
Second thread processing

Perhatikan outputnya, thread pertama dibuat dan dia mulai melakukan proses, kemudian thread ke dua dibuat dan melakukan proses. Satu hal yg harus diingat, urutan eksekusi dapat berbeda-beda tergantung dengan “OS scheduling algorithm”.