*Session 7
Threads
A) Thread
- Bagian dari eksekusi (running, ready, dll).
- Isi thread disimpan ketika tidak berjalan.
- Memiliki tumpukan eksekusi.
- Beberapa penyimpanan statis per-thread digunakan untuk variabel lokal.
- Akses ke memori dan sumber daya dari prosesnya.
- Thread memungkinkan beberapa eksekusi berlangsung dalam lingkungan proses yang sama.
- Proses ringan (karena thread memiliki beberapa sifat dari proses).
- Multithreading (memungkinkan beberapa thread dalam proses yang sama).
B) Model Thread

* kolom pertama berisi beberapa item yang dibagi oleh semua thread dalam sebuah proses.
* kolom kedua berisi beberapa item private ke setiap thread.

* setiap thread memiliki tumpukan sendiri.
C) Manfaat dari Thread
- Membutuhkan waktu yang sedikit untuk membuat thread baru dari sebuah proses.
- Membutuhkan waktu yang sedikit untuk mengakhiri thread dari proses.
- Membutuhkan waktu yang sedikit untuk menukar antara 2 thread dalam proses yang sama.
- Karena thread dalam proses yang sama membagikan memori dan file, mereka dapat berkomunikasi satu sama lain tanpa melibatkan kernel.
D) Implementasi Thread
a) User Space
*Keuntungan :
- Memungkinkan setiap proses untuk memiliki algoritma penjadwalan sendiri.
- Performance.
*Kerugian :
- Implementasi dari pemblokiran panggilan sistem.
- Tidak ada thread lain yang dapat berjalan kecuali thread pertama secara sukarela menyerahkan CPU.
b) Kernel Space
*Keuntungan :
- Tidak membutuhkan panggilan sistem non-blocking baru.
*Kerugian :
- Biaya yang lebih besar untuk menciptakan dan menghancurkan thread.
c) Hybrid
*thread tingkat multiplexing user ke thread tingkat kernel.
E) Pop Up Thread

*pembuatah thread baru ketika pesan tiba.
a) Sebelum pesan tiba.
b) Setelah pesan tiba.
F) Dasar-Dasar Thread
- Semua thread didalam proses yang sama membagikan :
– Tempat alamat yang sama.
– Instruksi proses.
– Sebagian besar adalah data.
– Open file (descriptor).
– Sinyal dan sinyal handler.
– Direktori kerja saat ini.
– Pengguna dan ID grup. - Setiap thread memiliki keunikan :
– ID thread.
– Kumpulan register, stack pointer.
– Tumpukan untuk variabel lokal, mengembalikan alamat.
– Mask sinyal.
– Prioritas.
– Return value.
G) Bagian Thread
- Spawn
– Biasanya ketika sebuah proses baru dibuat, thread untuk proses itu juga dibuat.
– Thread dalam proses dapat membuat thread lain dalam proses yang sama, memberikan pointer instruksi dan argumen untuk thread baru. Thread baru disediakan dengan konteks registernya sendiri dan ruang tumpukan dan ditempatkan pada antrian yang siap. - Block
– Ketika thread harus menunggu untuk sebuah proses, pemblokiran terjadi. (menyimpan register pengguna, program counter, dan tumpukan pointer)
– Prosesor mungkin sekarang beralih ke eksekusi dari thread lain yang sudah siap pada proses yang sama atau berbeda. - Unblock
– Ketika proses dimana thread yang sedang diblokir terjadi, thread tersebut akan dipindahkan ke antrian yang siap. - Finish
– Ketika thread selesai, konteks register dan tumpukan dialokasikan.
H) Contoh Multi Threading pada Prosesor Tunggal
I) Hubungan antara Thread dan Proses
- Coarse Threading
– Modul individu, yang disebut sistem, yang ditugaskan untuk prosesor individu.
– Dalam kasus Source engine, ini berarti menempatkan render pada satu prosesor, AI (artificial intelligence) yang lain, fisika yang lain, dan seterusnya.
– Setiap modul utama adalah thread tunggal dan koordinasi utama melibatkan sinkronisasi semua thread dengan thread waktu. - Fine-grained Threading
– Banyak tugas yang sama atau identik tersebar di beberapa prosesor.
– Contoh : loop yang mengulang pada array data dapat dibagi menjadi beberapa loop paralel yang lebih kecil di thread individu yang dapat dijadwalkan secara paralel. - Hybrid Threading
– Ini melibatkan penggunaan selektif dari fine-grained threading untuk beberapa sistem dan threading tunggal untuk sistem lain.
K) Thread POSIX (Portable Operating System Interface)
*Session 8
Threads (2)
A) Pemrograman Thread
- Parameter obj menunjuk ke struktur pthread_t, digunakan untuk menyimpan id dari thread yang dibuat bersama dengan rincian.
- Parameter attr menunjuk ke objek pthread_attr_t yang digunakan untuk mengatur sifat khusus dari thread. (misalnya penjadwalan dan prioritas)
- Jika attr adalah NULL, thread akan dibuat dengan penjadwalan default dan sifat prioritas.
- func adalah pointer ke fungsi. (fungsi hanya dapat mengambil void * parameter)
- Arg adalah void * yang mewakili argumen yang dilewatkan ke fungsi func ketika thread dieksekusi.
- Jika benar fungsi return 0.
- pthread_self ()
– Untuk mendapatkan ID-nya. - pthread_join ()
– Untuk menggabungkan atau menggabungkan kembali berbagai aliran kontrol.
– Ketika dipanggil, panggilan thread ditunda sampai eksekusi dari target thread dihentikan.
– Sumber rilis. (yaitu mencegah thread zombie) - Contoh :
#include <iostream>
#include <pthread.h>
using namespace std;
int main(int argc, char** argv)
{
pthread_t thread_a, thread_b;
int N;
if (argc != 2)
{
cout << “Error” << endl;
return 0;
}
N=atoi(argv[1]);
pthread_create(&thread_a, NULL, task1, &N);
pthread_create(&thread_b, NULL, task2, &N);
cout << “Waiting to join” << endl;
pthread_join(thread_a, NULL);
pthread_join(thread_b, NULL);
return 0;
} - Contoh fungsi untuk tugas :
void* task1(void* x)
{
int* temp = (int*) x;
for (int count 0; count < *temp;
count++)
{
cout << “Thread A” << endl;
}
cout << “Thread A Complete” << endl;
return NULL;
}
B) Pengaturan Atribut Thread
*Beberapa sifat :
- Contention Scope
– Digunakan untuk mengatur properti penjadwalan baik di dalam proses atau pada sistem global. - Stack Size & Stack Address
– Memungkinkan programmer untuk mengatur seberapa besar tumpukan yang seharusnya dan di mana tempat memori yang seharusnya. - Detach State
– Dapat membuat thread secara terpisah atau tergabung. - Schedule Policy & Schedule Parameters.
– Jika sistem operasi Anda mendukungnya, anda dapat menguraikan penjadwalan apa yang harus dilakukan dalam proses antara Light Weight Processes (LWP). Anda bahkan dapat memberikan parameter seperti prioritas. - Ketika thread dibuat dengan objek atribut yang sesuai, thread akan memiliki perilaku yang ditentukan.
- Dalam rangka untuk mengatur objek atribut, kita harus memanggil : pthread_attr_init ()
- Contoh :
#include <iostream>
#include <pthread.h>
using namespace std;
int main(int argc, char** argv)
{
pthread_t thread_a, thread_b;
pthread_attr_t attr;
int N;
if (argc != 2)
{
cout << “Error” << endl;
return 0;
}
N=atoi(argv[1]);
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create(&thread_a, &attr, task1, &N);
pthread_create(&thread_b, NULL, task2, &N);
cout << “Waiting to join” << endl;
pthread_join(thread_b, NULL);
return 0;
}
C) Detached Threads
- Sebuah detached thread adalah salah satu thread yang tidak ditunggu oleh thread lain.
- Ketika thread dihentikan, maka secara otomatis akan direklamasi oleh sistem operasi.
D) Terminating Thread
- pthread_exit ()
Fungsi mengambil pointer ke data yang dikembalikan ketika thread bergabung.
E) Kapan Menggunakan Thread?
- Thread paling cocok untuk program yang membutuhkan untuk melakukan hal-hal secara bersamaan atau memiliki sejumlah tugas yang dapat diselesaikan secara paralel untuk mendapatkan hasil.
- Ketika menulis program anda menggunakan thread, anda harus mengatur program menjadi tugas diskrit yang dapat dijalankan secara bersamaan.
- Contoh :
– Masalah grafis komputer, misalnya Ray tracing.
– Manipulasi matriks.












