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
$ ./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”.