MODUL 3
Oleh:
Kelompok 42
Asisten:
Syifa Primastuti
5107100059
2010
Soal Pendahuluan:
• Proses
Proses memiliki ruang tersendiri di memori untuk menampung proses image. Selain
itu akses ke hardware (processor, memori, I/O) yang dibatasi.
• Thread
Sedangkan thread akses ke memori dan resource diakses oleh prosesnya. Thread
sendiri memiliki berbagai keuntungan diantaranya waktu pembuatan yang lebih
cepat, waktu pemberhentian yang lebih cepat, waktu pergantian antar thread lebih
cepat bila dibandingkan proses serta komunikasi antar thread yang lebih efisien
karena mereka saling berbagi memori antar thread itu sendiri.
item nextProduced;
while (1) {
buffer[in] = nextProduced;
in = (in + 1) % BUFFER_SIZE;
counter++;
item nextConsumed;
while (1) {
while (counter == 0) { ... do nothing ... }
nextConsumed = buffer[out] ;
counter--;}
5. Jelaskan apa yang dimaksud dengan mutex, sebutkan juga perbedaan dan persamaanya
jika dibandingkan dengan semaphore !
Mutexes (mutex locks) adalah penguncian yang diperlukan untuk menjaga konsistensi
data ketika beberapa thread dapat mengakses atau memodifikasi data pada saat yang sama,
sehingga thread-thread lain yang mencoba mengakusisi mutex akan mem-block.
Pemblokiran didapatkan dengan melakukan “spinning” atau “sleeping”
Mutex Semaphore
Dilepaskan hanya oleh thread yang telah Dilepaskan dari thread lain (atau proses)
diperoleh sehingga lebih cocok untuk beberapa
masalah sinkronisasi
• pthread_t
Berfungsi untuk menyimpan thread ID.
• pthread_mutex_t
a. Kernel Level
c. Hybrid
9. Salah satu masalah lain dalam lock file adalah livelock, jelaskan mengenai apa itu livelock
• Livelock hampir sama seperti deadlock, tetapi state pada prosesnya secara
konstan berubah menghargai satu sama lain, tidak progressing.
• Live lock adalah spesial kasus dari resource starvation, definisi umumnya
hanya state yang spesifik pada proses bukan progressing.
• Contohnya livelock :
ketika dua orang berpapasan di koridor yang sempit, dan masing-masing mencoba
mempersilakan yang lainnya lewat dengan geser sedikit ke samping, tetapi
keduanya tidak terpengaruh dari satu sisi ke satu sisi tanpa membuat progresss
karena mereka melalui jalan yang sama saat waktu yang sama.
10. buat program yang menunjukan perbedaan antara pendekatan multi process dan multi
threading dengan menyelesaikan problem ini:
• setiap program membuat 10 proses atau 10 thread(1 program 10 thread saja atau
10 proses saja)
jawab :
#include <pthread.h>
#include <stdio.h>
int main()
{
int loop;
pthread_t thread;
for(loop=1;loop<=10;loop++)
{
pthread_create(&thread,NULL,&fibo,(void*)loop);
pthread_join(thread,NULL);
}
return 0;
}
#include <pthread.h>
#include <stdio.h>
untuk program 50 deret fibonacci multithreading, 50 deret fibonacci multiprocessing, 100 deret
fibonacci multithreading dan 100 deret fibonacci multiprocessing kami lampirkan.
#include <stdio.h>
#include <string.h>
else return 0;
}
int balik(int x, int y, int tanda) //perhitungan sesuai return value operator
char soal[30];
int hasil[strlen(soal)];
{ if((soal[a]!='*')&&(soal[a]!='+')&&(soal[a]!='-')&&(soal[a]!
='/')&&(soal[a]!='(')&&(soal[a]!='^')&&(soal[a]!=')'))
else
else
{ if((soal[a]!='(')&&(soal[a]!=')'))
{ if(poin(soal[a])> poin(stack[stackx-1]))
else
if(stack[stackx]!='(')
{ hasil[counter++]=tingkat(stack[stackx]);
stack[stackx++]= soal[a];
if(soal[a]=='(') stack[stackx++]=soal[a];
if(soal[a]==')')
{ stackx--;
}
}
int try=0;
try++;
// for(a=0; a<try;a++)
// printf("%d,", hasil[a]);
counter=0;
int x=-100,y=-100;
if(hasil[a]<-100)
stackx=1;
while(1)
{ if(hasil[a-stackx]>-100)
if(y>-100)
{ x=hasil[a-stackx];
hasil[a-stackx]=balik(x,y,hasil[a]);
counter=hasil[a-stackx];
hasil[a]=-100;
y=-100;
x=-100;
break;
else
{ y=hasil[a-stackx];
hasil[a-stackx]=-100;
stackx++;
FILE *fp;
fp=fopen("test.txt", "r+");
fclose(fp);
fp=fopen("test.txt", "w+");
save= save+counter;
fclose(fp);
}
int main()
FILE *fp;
fp=fopen("test.txt", "w+");
fclose(fp);
scanf("%d", &jumlah);
pthread_t thread;
for(loop=1;loop<=jumlah;loop++)
pthread_create(&thread,NULL,&operasi,NULL);
pthread_join(thread,NULL);
return 0;
}
2. Buatlah contoh program simulasi penelusuran direktori, dimana program meminta input
berupa direktori yang akan ditelusuri, kemudian program akan menelusuri isinya dan tiap
kali menemukan suatu direktori, program akan membuat thread baru untuk menelusuri
direktori tersebut. Program akan menghasilkan output berupa file dengan nama file
berupa direktori yang ditemukan dan isi filenya berupa daftar nama file dan direktori
yang ditemukan. Contoh :
/home -> ini yang ditelusuri, isinya
|
>> a.txt
>>b.txt
>>/aku
|
>> c.txt
Maka akan dibuat 2 file, yaitu file dengan nama home yang berisi a.txt, b.txt, dan aku, dan file
dengan nama aku yang berisi c.txt
JAWAB :
#include<stdio.h>
#include<dirent.h>
#include<stdlib.h>
#include<pthread.h>
#include <string.h>
char direc[100];
DIR *dir;
dir = opendir(directory);
chdir(directory);
char var[100];
while (dir)
if((vari=readdir(dir))!=NULL)
pthread_t thread;
pthread_create(&thread,NULL,&cari,vari->d_name);
pthread_join(thread,NULL);
}
else break;
fclose(log);
closedir(dir);
return;
int main()
pthread_t va;
scanf ("%s",direc);
pthread_create(&va,NULL,&cari,direc);
pthread_join(va,NULL);
return 0;