Threads by Example (1): Creating threads

Habis baca e-book Advanced Linux Programming, bab 4 tentang threads. Di artikel ini, saya mencoba menulis point penting dengan contoh kode yang menggunakan threads, khususnya cara create threads.
Dengan threads memungkinkan suatu program melakukan lebih dari satu pekerjaan dalam satu waktu (bersamaan).
Hubungan antara program, process dan thread adalah bahwa satu program menjalankan satu atau lebih process, dimana tiap-tiap proses menjalankan satu atau lebih threads. Jika satu program dijalankan, Linux akan membuat setidaknya satu process dengan satu thread.

Objective

Yang dipelajari:

  1. membuat 2 buah thread
  2. melewatkan parameter ke fungsi thread
  3. menggunakan pthread_join untuk menunggu thread menjalankan fungsinya
  4. bahwa fungsi thread dijalankan asinkron

Membuat thread

GNU/Linux menggunakan API thread standar POSIX (yang dikenal sebagai pthreads) dengan prototipe fungsi dan tipe data didefinisikan di <pthread.h>.
Fungsi yang digunakan untuk membuat thread adalah pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void*), void *restrict arg). Yang harus disediakan adalah:

  • pointer ke variabel pthread_t, dimana thread_ID akan tersimpan
  • pointer ke thread attribute. Object ini akan mengontrol interaksi thread dengan program. Jika diisi NULL, maka thread akan dibuat dengan atribut default
  • pointer ke fungsi thread, yang didefinisikan dalam: void* your_func_name (void*)
  • nilai argumen, dengan tipe void*, yang akan dikirim ke fungsi thread

Sebuah thread akan berhenti saat fungsi thread return. Nilai return fungsi thread akan menjadi return value dari thread.

Kode program

Berikut kode program untuk membuat 2 thread baru untuk menampilkan sejumlah 100 huruf A dan 150 huruf B. Linux akan melakukan schedulling kedua thread asinkron (unordered). Huruf yang ditampilkan diberikan oleh program utama ke thread (passing data to thread).

/* creating_thread.c
Belajar #1
kode program untuk membuat 2 thread baru untuk menampilkan sejumlah 100 huruf 
A dan 150 huruf B. Huruf yang ditampilkan diberikan oleh program utama ke thread
*/
#include <pthread.h>
#include <stdio.h>
#include <unistd.h> /*usleep*/

/*parameters*/
struct char_parms {
	/*karakter yang diprint*/
	char karakter;
	/*frekuensi penulisan*/
	int count;
};

/*thread function
print sejumlah karakter
*/
void* char_print(void* params)
{
	struct char_parms* p = (struct char_parms*) params; /*cast params*/
	
	int i;
	for ( i=0;i<p->count;i++ ) {
		fputc(p->karakter, stderr); /*print ke stderr*/
		usleep(100000); /*agar tampak ada 2 thread yang jalan*/
	}	
	return NULL;
}

/*Main program
 */
int main()
{
	pthread_t thread1_id;
	pthread_t thread2_id;
	
	struct char_parms thread1_args;
	struct char_parms thread2_args;	
	
	/*Buat thread untuk mencetak 100 huruf A*/
	thread1_args.karakter = 'A';
	thread1_args.count = 100;
	pthread_create(&thread1_id, NULL, &char_print, &thread1_args);
	
	/*Buat thread untuk mencetak 150 huruf B*/
	thread2_args.karakter = 'B';
	thread2_args.count = 150;
	pthread_create(&thread2_id, NULL, &char_print, &thread2_args);
	
	/*Tunggu sampai semua thread menyelesaikan tugasnya*/
	/*Thread return value tidak diperlukan, sehingga pointer diset NULL*/
	pthread_join(thread1_id, NULL); /*thread 1*/
	pthread_join(thread2_id, NULL); /*thread 2*/	
	
	return 0;
}

Untuk mengkompilenya:

cc -o creating_thread creating_thread.c -lpthread

Jalankan program: ./creating_thread

Baca juga: Threads by Example(2): Threads return value

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: