Rabu, 19 November 2014

Implementasi Sederhana Thread

Hai sobat blogger!
Langsung saja ya, postingan kali ini saya akan membahas tentang bagaimana cara mengimplementasi secara sederhana thread. :D
Oke kita mulai!

*Pertama, apa itu Thread?
Ulir, utas atau thread (singkatan dari "thread of execution") dalam ilmu komputer, diartikan sebagai sekumpulan perintah (instruksi) yang dapat dilaksanakan (dieksekusi) secara sejajar dengan ulir lainnya, dengan menggunakan cara time slice (ketika satu CPU melakukan perpindahan antara satu ulir ke ulir lainnya) atau multiprocess (ketika ulir-ulir tersebut dilaksanakan oleh CPU yang berbeda dalam satu sistem). (Sumber: http://id.wikipedia.org/wiki/Utas_%28komputer%29)
Nah kalo di atas itu dari wikipedia, saya punya beberapa informasi yang bermanfaat, tentunya tentang thread. Monggoh:


1. pthread_t
Berfungsi untuk menyimpan thread ID. 
2. pthread_mutex_t 
mendeklarasikan variabel mutex 
3. pthread_create 
Membuat suatu Thread baru dan langsung dieksekusi.Saat memanggil fungsi ini kita harus mendefinisikan sebuah atribut objek dari thread tersebut,jika tidak maka atributnya akan diset default. 
4. pthread_detach 
Fungsi ini digunakan untuk menunjukkan penyimpanan untuk thread yang bisa dipakai ketika mengakhiri thread. Jika thread belum berakhir, pthread_detach () tidak akan mengakhiri thread. Pengaruh panggilan pthread_detach () pada target thread yang sama tidak ditentukan. 
5. pthread_cancel 
Saat fungsi ini dipanggil, request akan dibatalkan.tetapi Thread masih running.pemangggilan fungsi ini gagal jika ID Thread yang akan dicancel tidak valid. 
6. pthread_mutex_lock 
Kunci mutex. Jika mutex telah dilock, maka fungsi ini akan memblok eksekusi sampai mutex diunlock. Beberapa thread dapat sekaligus terblok oleh lock mutex, dan hanya satu thread yang unblock (secara acak) saat mutex diunlock. 
7. pthread_mutex_unlock 
Membuka kunci mutex (unlock). Fungsi ini sebaiknya dipanggil oleh thread yang melock mutex. 
8. pthread_mutex_destroy 
Function untuk menghapus variabel mutex. 
9. pthread_exit 
Menterminate sebuah thread agar thread itu berhenti suatu saat yang kita mau.  
10. pthread_join  
Untuk menggabungkan thread-thread yang sudah dicreate agar berjalan secara bersamaan (saling menunggu proses dalam thread-thread lainnya, sehingga program akan selesai bersamaan).

10 poin di atas adalah beberapa fungsi thread dalam pemrograman yang umum digunakan.
Oke, setelah basa-basi tentang sedikit pengertian untuk daemon, sekarang langsung saja kita praktekkan cara membuat thread ini. :D

*Kedua, contoh codingan untuk thread sederhana


#include<stdio.h>

#include<string.h>
#include<pthread.h> //standard library untuk thread
#include<stdlib.h>
#include<unistd.h>

pthread_t tid[2]; //jadi di line ini, kita membuat variabel tid[2] untuk thread

void* doSomeThing(void *arg) //standar parameter yang kita gunakan
{
    unsigned long i = 0; //deklarasi variabel i dengan isi 0 berupa unsigned long

    pthread_t id = pthread_self(); //jadi fungsi pthread_self() berfungsi //mengembalikan nilai thread ID yang digunakan. Dan nilai tersebut dimasukkan ke //variabel id yang merupakan thread yang baru saja kita buat.



    if(pthread_equal(id,tid[0])) //nah kalau misalkan tid[0] dan id isinya sama //(menggunakan pthread_equal membandingkannya), maka langsung kita print "First //thread processing"
    {
        printf("\n First thread processing\n");
    }
    else //lainnya, berarti langsung kita print "Second thread processing"
    {
        printf("\n Second thread processing\n");
    }

    for(i=0; i<(0xFFFFFFFF);i++); //kita big loop, maksud dari 0xFFFFFFFF adalah //sampai semampunya batas memori komputer kita

    return NULL; //seperti biasa, tidak ada nilai yang harus dikembalikan maka //return NULL
}

int main(void)
{
    int i = 0; //deklarasi variabel i dengan isi 0
    int err; //kemudian deklarasi err dengan format integer

    while(i < 2) //perulangan 2x
    {
        err = pthread_create(&(tid[i]), NULL, &doSomeThing, NULL); //nah err tadi //berfungsi sebagai variabel thread yang baru saja kita create, dengan isi dari //tid[i] kemudian melakukan fungsi doSomeThing
        if (err != 0) //kemudian ini dia kenapa pthread_create tadi kita masukkan //ke variabel err, supaya bisa mengecek apakah error apa tidak, menggunakan //strerror
            printf("\ncan't create thread :[%s]", strerror(err));
        else //jika thread/err = 0, maka langsung kita print di bawah ini.
            printf("\n Thread created successfully\n");

        i++; //penambahan i guna perulangan while 2x di atas
    }

    sleep(5); //kita sleep selama 5 detik, jadi thread ini akan jalan tiap 5 //detik
    return 0; //tidak ada return value
}

Oke, output dari codingan sederhana di atas adalah sebagai berikut:

Thread created successfully 
First thread processing

Thread created successfully

Second thread processing

Selesailah sudah pengimplementasian sederhana dalam bentuk coding untuk thread pada postingan kali ini :D 
Terima kasih telah membaca dan sampai jumpa :D

Sumber:
http://www.thegeekstuff.com/2012/04/create-threads-in-linux/

Tidak ada komentar:

Posting Komentar