- Operasi Thread meliputi pembuatan , penghentian, sinkronisasi, penjadwalan, manajemen data, dan proses interaksi thread.
- Sebuah thread tidak menjaga/memelihara daftar thread yg dibuat dan tidak tahu thread yg membuat.
- Semua thread dalam sebuah proses memiliki alamat space yg sama.
- Thread2 yg berada pada proses yg sama membagi:
- Instruksi proses
- Data
- descriptors
- sinyal dan sinyal handler
- direktori
- User and group id
- Setiap thread memiliki:
- Thread ID
- set of registers, stack pointer
- stack utk variable lokal, return addresses
- signal mask
- prioritas
- Return value: errno
- pthread functions return "0" if OK.
Library thread menyediakan 3 jenis sinkronisasi yaitu:
- mutexes - Mutual exclusion lock: Mem-block akses ke variable yg dilakukan thread lain. Ini memaksa akses ekslusif ole thread ke variable atau set variable
- joins - Membuat thread menunggu sampai thread lain selesai.
- condition variables - data type pthread_cond_t
Mutexes:
Mutexes digunakan untuk mencegah terjadinya inkonsistensi data karena operasi oleh thread2 yg berada di area memory yg sama dan dijalankan di saat yg sama atau mencegah terjadinya race condition. race condition sering terjadi saat dua thread atau lebih harus dilaksanakan di area memory yg sama, tapi hasil komputasinya tergantung dari urutan contention .contoh mutex:
/* Note scope of variable and mutex are the same */ pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; int counter=0; /* Function C */ void functionC() { pthread_mutex_lock( &mutex1 ); counter++ pthread_mutex_unlock( &mutex1 ); }
Joins:
join dibutuhkan saat thread ingin menunggu thread lain utk selsesai. thread yg memanggil routin bisa meluncurkan multiple thread lalu menunggu nya untuk selesai dan mendapatkan hasil.contoh Join:
#include <stdio.h> #include <pthread.h> #define NTHREADS 10 void *thread_function(void *); pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; int counter = 0; main() { pthread_t thread_id[NTHREADS]; int i, j; for(i=0; i < NTHREADS; i++) { pthread_create( &thread_id[i], NULL, thread_function, NULL ); } for(j=0; j < NTHREADS; j++) { pthread_join( thread_id[j], NULL); } /* Now that all threads are complete I can print the final result. */ /* Without the join I could be printing a value before all the threads */ /* have been completed. */ printf("Final counter value: %d\n", counter); } void *thread_function(void *dummyPtr) { printf("Thread number %ld\n", pthread_self()); pthread_mutex_lock( &mutex1 ); counter++; pthread_mutex_unlock( &mutex1 ); }
Tidak ada komentar:
Posting Komentar
silahkan di komen ya, blog ini adalah dofollow, jadi kalau kamu ninggalin komentar blog ini otomatis memberi backlink ke kamu :)
Pengunjung yang baik selalu meninggalkan jejak :)