10 Thread
10 Thread
Semester 4
Matakuliah CE321324 System Programming
Minggu ke/Session 9/2
Topik Thread
Aktifitas Write a code
Waktu pengerjaan 1 Sessions
Setoran Source Code
Batas akhir penyerahan The end of this session
Tempat penyerahan TA
Tujuan Knowing how the implementation of POSIX the thread using
the C programming language in a linux environment
Amati dan analisis kode program yang diberikan pada praktikum ini. Anda harus
memahami apa yang dilakukan oleh program ketika program tersebut dieksekusi.
1. Program berikut akan mencek apakah platform linux Anda mendukung thread. Tuliskan
program dibawah ini dan berikan nama thread1.c,
/* Filename: thread1.c */
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
2. Compile dan run program tersebut. Amati output program tersebut. Output program tersebut akan
terlihat seperti berikut ini:
root@someserver:/home/spc/07_thread# ./thread1
POSIX version is set to 200809
Your system supports POSIX1003.1c threads,
including support for priority scheduling
#include <pthread.h>
int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void
*), void
3. Create thread didalam sebuah proses. Tuliskan kode program dibawah ini dan berinama thread2.c.
/* Filename : thread2.c */
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
int main() {
int res;
pthread_t a_thread;
void *thread_result;
if(res != 0) {
perror("Thread creation failed\n");
exit(EXIT_FAILURE);
}
if(res != 0){
perror("Thread join failed");
exit(EXIT_FAILURE);
}
Sistem call pthread_create digunakan untuk mencreate sebuah thread baru. Jika pemanggilan system
call ini berhasil, maka akan ada dua thread yang running. Thread original (main) akan melanjutkan
untuk mengeksekusi kode program setelah pemanggilan pthread_create. Sedangkan thread yang baru
akan megneksekusi kode yang ada pada fungsi yang sudah didefinisikan thread_function.
Kemudian thread original akan mencek apakah thread yang baru sudah mulai dan
memanggilpthread_join. Fungsi ini akan menunggu hingga thread yang lain diterminasi sebelum
threat ini return.
root@someserver:/home/spc/07_thread# ./thread2
Waiting for thread to finish....
6. Program untuk mencek apakah ekseskusi dua buat thread terjadi secara simultan. Program ini
merupakan modifikasi program thread2.c dengan menambahkan sebuah variabel sharing antar kedua
thread tersebut.
/* Filename: thread3.c */
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
int run_now = 1;
int main() {
int res;
pthread_t a_thread;
void *thread_result;
if(res != 0) {
perror("Thread creation failed\n");
exit(EXIT_FAILURE);
}
int print_count1 = 0;
if(res != 0){
perror("Thread join failed");
exit(EXIT_FAILURE);
}
int print_count2 = 0;
root@someserver:/home/spc/07_thread# ./thread3
121212121212121212
Waiting for thread to finish....
Thread joined, it returned (null)
Message is now Hello World
Setiap thread memberitahukan thread yang lain untuk menjalankan dengan menetapkan variable run_now
dan kemudian menunggu sampai thread yang lain telah mengubah nilai itu sebelum berjalan kembali.
Contoh program ini memperlihatkan perpindahan eksekusi antar dua thread secara otomatis dan
menggambarkan bahwa kedua thread berbagi bersama antar dua variabel.
C. Tugas
2. Apa yang terjadi jika thread yang dibuat tidak di join oleh main program??
a. Coba analisis dengan menghilangkan baris code yang men-join thread ke main program
b. Jadi apa gunanya thread join?
4. Buatlah sebuah thread yang menerima argument berupa array of integer [1,2,...10] dan menampilkan
isi dari array tersebut. (array --> void --> array)
5. References