Model shared memory adalah arsitektur komputasi paralel di mana beberapa Unit Pemroses Sentral (CPU) memiliki akses ke satu ruang memori utama yang sama.
Komponen: Terdiri dari beberapa CPU, sebuah interconnect (jalur komunikasi), dan satu blok memori.
Cara Kerja: Semua CPU dapat membaca dan menulis ke lokasi memori yang sama. Komunikasi antar CPU terjadi secara implisit dengan memodifikasi data di memori bersama ini. Ini berbeda dengan model distributed memory di mana setiap prosesor memiliki memorinya sendiri.
Proses vs. Thread
Proses: Sebuah instans dari program yang sedang berjalan. Setiap proses memiliki ruang memori, data, dan state-nya sendiri yang terisolasi dari proses lain.
Thread: Sering disebut sebagai “proses ringan” (light-weight process). Dalam model shared memory, satu proses dapat memiliki beberapa thread yang berjalan secara bersamaan. Semua thread dalam satu proses berbagi ruang memori yang sama (termasuk variabel global), namun masing-masing memiliki stack eksekusi dan instruction pointer-nya sendiri.
Pthreads (POSIX Threads)
Pthreads adalah sebuah standar API (Application Programming Interface) yang mendefinisikan cara membuat dan mengelola thread dalam bahasa C.
Standar: Merupakan standar POSIX untuk sistem operasi mirip Unix (seperti Linux, macOS, Solaris).
Bentuk: Berupa sebuah library (libpthread) yang harus di-link saat kompilasi.
Tujuan: Menyediakan serangkaian fungsi, tipe data, dan konstanta untuk memfasilitasi pemrograman multi-threaded.
Struktur Dasar Program Pthreads
Program Pthreads umumnya memiliki alur sebagai berikut:
Inisialisasi: Main thread (program utama) dieksekusi terlebih dahulu.
Pembuatan Thread: Main thread membuat beberapa thread baru menggunakan fungsi pthread_create. Setiap thread akan menjalankan fungsi yang telah ditentukan.
Eksekusi Paralel: Semua thread (termasuk main thread) berjalan secara bersamaan dan dapat mengakses variabel global yang sama.
Sinkronisasi/Join: Main thread menunggu semua thread yang dibuatnya selesai menjalankan tugasnya dengan menggunakan fungsi pthread_join. Ini penting untuk memastikan semua pekerjaan selesai sebelum program berakhir.
Pembersihan & Selesai: Setelah semua thread selesai, main thread dapat melanjutkan eksekusinya, melakukan pembersihan (seperti membebaskan memori), dan kemudian keluar.
Fungsi Inti Pthreads: pthread_create dan pthread_join
int pthread_create(...): Fungsi untuk membuat (memulai) sebuah thread baru.
Argumen 1 (pthread_t* thread_p): Pointer ke sebuah variabel pthread_t yang akan menyimpan ID unik dari thread yang baru dibuat.
Argumen 2 (attr_p): Atribut untuk thread (biasanya NULL untuk pengaturan default).
Argumen 3 (start_routine): Pointer ke fungsi yang akan dieksekusi oleh thread baru. Fungsi ini harus memiliki prototipe void* nama_fungsi(void*).
Argumen 4 (arg_p): Pointer ke argumen yang akan dilewatkan ke start_routine. Jika perlu mengirim lebih dari satu nilai, bisa menggunakan pointer ke sebuah struct.
int pthread_join(...): Fungsi untuk memblokir eksekusi thread pemanggil (misalnya, main thread) sampai thread target selesai.
Argumen 1 (pthread_t thread): Handle atau ID dari thread yang akan ditunggu.
Argumen 2 (retval): Pointer untuk menyimpan nilai yang dikembalikan oleh fungsi thread.
Kompilasi Program Pthreads
Untuk mengompilasi program C yang menggunakan Pthreads, kita perlu me-linklibrary Pthreads. Ini dilakukan dengan menambahkan flag -lpthread pada akhir perintah gcc.
Untuk eksekusi program C yang menggunakan Pthreads, sertakan argumen ke-1 (setelah nama file) yang berisi jumlah thread yang akan digunakan.
./pth_hello 1./pth_hello 4
Summary
Model pemrograman shared memory memungkinkan beberapa thread, yang merupakan unit eksekusi ringan dalam satu proses, untuk beroperasi secara bersamaan dengan mengakses ruang memori yang sama. Pthreads (POSIX Threads) adalah standar API C untuk membuat dan mengelola thread ini, menggunakan fungsi inti seperti pthread_create untuk memulai eksekusi thread dan pthread_join untuk menunggu penyelesaiannya, yang menjadi fondasi untuk paralelisasi tugas.