Tutorial Linux Part 5: Thread dan Implementasinya pada Program C

Selamat datang kembali pada tutorial Linux yang ke-5. Kali ini saya akan membahas sesuatu yang bekerja hampir seperti Process yang telah saya jelaskan sebelumnya. Jika hanya dapat dijalankan sebuah process pada satu waktu, maka berbeda dengan thread  yang dapat dijalankan bersama – sama dalam satu waktu. Thread dapat diartikan sebagai bagian – bagian kecil dari process. Karena sifatnya yang dapat berjalan bersama – sama thread dapat banyak kita manfaatkan untuk menjalankan hal – hal yang kita inginkan dengan lebih mudah. Cara penggunaan thread dibagi menjadi dua, yaitu :

Single Threading
                Sebuah process  yang hanya memliki satu buah thread  di dalamnya. Biasanya hal ini digunakan sebagai pengendali jalannya process.


Multi Threading
                Sebuah process yang memiliki lebih dari satu thread di dalamnya.

Dibawah ini adalah contoh cara penggunaan thread dalam bahasa C. Disini saya akan membuat sebuah music player. Berikut pembuatannya:

Pertama kita masukkan library untuk penggunaan thread dalam C

#include <pthread.h>

Kemudian kita deklarasikan banyak thread yang kita ingin gunakan

Pthread_t tid[6];

Kemudian kita buat sebuah fungsi yang berisi fungsi – fungsi thread
void* playandcount(void *arg){
                unsigned long i=0;
                pthread_t id=pthread_self();
                int iter;
                if(pthread_equal(id,tid[1])){
                                system("clear");
                                printf("\nHelp List\n");
                                                printf("Press the below number to execute command\n");
                                                printf("1===Show Help command\n");                                 
                                                printf("2===Show playlist\n");
                                                printf("3===Play\n");
                                                printf("4===Pause after x sec\n");
                                                printf("5===Continue after x sec\n");
                                                printf("6===Stop after x sec\n");
                }
                else if(pthread_equal(id,tid[2])){
                                system("clear");
                                system("ls Playlist | grep .mp3");
                }             
                else if(pthread_equal(id,tid[3])){
                                system("clear");
                                chdir("Playlist");
                                snprintf(music, sizeof(music), "mpg123 %s", lagu);
                                system(music);
                }
                else if(pthread_equal(id, tid[4])){
                                system("clear");                              
                                for(j=n;j>=0;j--)
                                {
                                                printf("%d\n", j);
                                                sleep(1);
                                                system("clear");
                                }
                                system("pkill -STOP mpg123");
                }
                else if(pthread_equal(id, tid[5])){
                                system("clear");
                                for(j=n;j>=0;j--)
                                {
                                                printf("%d\n", j);
                                                sleep(1);
                                                system("clear");
                                }
                                system("pkill -CONT mpg123");
                }
                else if(pthread_equal(id,tid[6])){
                                system("clear");
                                for(j=n;j>=0;j--)
                                {
                                                printf("%d\n", j);
                                                sleep(1);
                                                system("clear");
                                }
                                system("pkill mpg123");
                }
                return NULL;
}

Setiap fungsi pthread equal dalam if mewakili satu buah thread bila dieksekusi. Kemudian berikut fungsi main


int main(void){
                                system("clear");
                                while(1){
                                                int flag=0;
                                                int comm;                                           
                                                int i=0;
                                                int err
                                                scanf("%d", &comm);
                                                getchar();
                                                if(comm==4 || comm==5 || comm==6)
                                                                scanf("%d", &n);
                                                else if(comm==3)
                                                                scanf("%s", lagu);
                                                printf("\n\n");
                               
                                                 if (err!=0)                             //Error Checking pada thread
                                                       printf("\ncan't create thread : [%s]", strerror(err));
                                                else{                                       //Membuat thread jika berhasil
                                                     err=pthread_create(&(tid[comm]), NULL, &playandcount, NULL);
                                                                }
                                               
                                }             
                return 0;
}


Nah, selesai sudah penjelasan saya mengenai thread dan penggunaannya. Semoga dapat banyak bermanfaat bagi kalian semua. Terima kasih. Sampai jumpa lagi…….

Tidak ada komentar:

Posting Komentar