Setelah dalam postingan sebelumnya
saya menjelaskan tentang proses,kali ini saya akan menjelaskan thread dan
IPC.Sudah paham kan apa yang dimaksud proses?? Bila belum coba lihat postingan
saya sebelumnya. Hehehe.
Jadi dalam sebuah proses terdapat
bagian kecil atau proses ringan(lightweight) yang biasa disebut thread. Dalam
sebuah proses ada yang menggunakan satu thread saja dan ada yang menggunakan
lebih dari satu thread.Proses yang melibatkan hanya satu thread tersebut
disebut single threading.Biasanya fungsi dari thread ini sebagai pengendali
jalannya sebuah proses.ada juga dalam sebuah proses yang terdiri dari beberapa
thread atau biasa disebut multi-threading.Jad thread dalam proses tersebut
dapat berjalan beriringan menjalankan tugas masing-masing sehingga proses
menjadi lebih cepat.Berikut ini adalah library yang digunakan untuk membuat
thread :
Selanjutnya yang akan saya bahas
yaitu IPC.IPC adalah singkatan dari Interprocess communication .Sesuai dengan
namanya jadi setiap proses yang ada dalam komputer bisa saling berkomunikasi
layaknya kita sebagai manusia yang bisa saling berkomunikasi dengan
sesama(asakan saling mengetahui bahasanya ya!!).Kalau tidak saling tahu bahasa
nya minimal bisa menggunakan bahasa isyarat lah untuk saling bertukar
informasi.Dalam tukar informasi pada komputer sendiri ada beberapa algoritma ,
antara lain yang populer yaitu :
a. Pipes
Pipe merupakan komunikasi
sequensial antar proses yang saling terelasi.
b. Message Queue
Sistem berkirim pesan adalah
proses komunikasi antar bagian sistem untuk
membagi variabel yang dibutuhkan.
c. Shared Memory
Sistem Berbagi Memori merupakan
salah satu cara komunikasi antar proses dengan cara mengalokasikan suatu alamat
memori untuk dipakai berkomunikasi antar proses. Pada metode ini, sistem akan
mengatur proses mana yang akanmemakai memori pada waktu tertentu sehingga
pekerjaan dapat dilakukan secara efektif.
d. Socket
Bentuk dari komunikasi yaitu UDP
dan TCP menggunakan abstraksi socket yang menyediakan endpoint untuk komunikasi
antar proses. Socket bisa dijalankan di berbagai platform(BSD UNIIX, UNIX,
Linux, Windows, & Machintos OS).
Salah satu algoritma IPC yang saya
jelaskan kali ini yaitu shared memory.Langsung saja kita buat contoh program
yang melibatkan algoritma shared memory.Di sini kita buat program ibaratnya
transaksi jual beli.Jadi kita buat satu source code dalam c sebagai penjualnya
dan kita buat lagi satu untuk pembelinya.Nantinya dari kedua source code tadi
kita jalankan melalui 2 terminal.Adapun langkah-langkahnya sebagai berikut :
1.Buat file source code untuk
penjual :
Berikut source code nya :
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#define SHSIZE 144
#define JMLBRG 6
typedef struct oink{
char
nama[15];
int
stok;
} jual;
int main(int argc, char *argv[])
{
int
i,jumlah,opt;
char
nama[15];
jual
*barang;
jual
*shm,*temp;
int
shmid;
key_t
key;
long
unsigned int jualsize;
jualsize
= sizeof(jual);
key=9876;
shmid=shmget(key,SHSIZE,IPC_CREAT|0666);
if(shmid<0)
{
perror("shmget");
exit(1);
}
shm=shmat(shmid,NULL,0);
if(shm==(jual
*) -1)
{
perror("shmat");
exit(1);
}
temp=shm;
barang=(jual*)malloc(jualsize);
barang->stok=0;
for(i=0;i<JMLBRG;i++){
if(i==0)
strcpy(barang->nama,"RAM");
else
if(i==1) strcpy(barang->nama,"Harddisk");
else
if(i==2) strcpy(barang->nama,"Motherboard");
else
if(i==3) strcpy(barang->nama,"PSU");
else
if(i==4) strcpy(barang->nama,"VGA");
else
if(i==5) strcpy(barang->nama,"Processor");
memcpy(temp,barang,jualsize);
temp+=jualsize;
}
system("clear");
while(1){
printf("=================================\n\n");
printf("1)
Lihat stok\n");
printf("2)
Tambah stok\n");
printf("Masukkan
pilihan : ");
scanf("%d",&opt);
system("clear");
if(opt==1){
temp=shm;
for(i=0;i<JMLBRG;i++){
printf("%s
: %d buah\n",temp->nama,temp->stok);
temp+=jualsize;
}
}
else
if(opt==2){
printf("Tambah
stok barang\n");
printf("Masukkan
nama : ");
scanf("%s",nama);
temp=shm;
for(i=0;i<JMLBRG
&& strcmp(temp->nama,nama);i++){
temp+=jualsize;
}
if(i==JMLBRG)
printf("%s tidak tersedia\n",nama);
// printf("%d
%s\n",temp->stok,temp->nama);
else
{
printf("Masukkan
jumlah : ");
scanf("%d",&jumlah);
(temp->stok)+=jumlah;
printf("Selamat,
%d %s berhasil ditambahkan. Stok %s adalah %d
buah.\n",jumlah,nama,nama,temp->stok);
}
}
else
if(opt==3){
exit(1);
}
else
printf("Masukan salah");
printf("\n");
}
return
0;
}
2. Buat file source code untuk
pembeli :
Berikut source code nya :
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#define SHSIZE 144
#define JMLBRG 6
typedef struct oink{
char
nama[15];
int
stok;
} jual;
int main(int argc, char *argv[])
{
int
i,jumlah,opt,cek;
char
nama[15];
jual
*shm,*temp;
int
shmid;
key_t
key;
long
unsigned int jualsize;
jualsize
= sizeof(jual);
key=9876;
shmid=shmget(key,SHSIZE,0666);
if(shmid<0)
{
perror("shmget");
exit(1);
}
shm=shmat(shmid,NULL,0);
if(shm==(jual
*) -1)
{
perror("shmat");
exit(1);
}
system("clear");
while(1){
printf("=================================\n\n");
printf("1)
Lihat barang\n");
printf("2)
Beli barang\n");
printf("Masukkan
pilihan : ");
scanf("%d",&opt);
system("clear");
if(opt==1){
cek=0;
temp=shm;
for(i=0;i<JMLBRG;i++){
if(temp->stok>0){
printf("%d
%s\n",temp->stok,temp->nama);
cek=1;
}
temp+=jualsize;
}
if(cek==0)
printf("Stok kosong\n");
}
else
if(opt==2){
printf("Masukkan
nama : ");
scanf("%s",nama);
temp=shm;
for(i=0;i<JMLBRG
&& strcmp(temp->nama,nama);i++){
temp+=jualsize;
}
if(i==JMLBRG)
printf("%s tidak tersedia\n",nama);
else
if(temp->stok==0) printf("Stok %s kosong\n",nama);
else
{
printf("Masukkan
jumlah : ");
scanf("%d",&jumlah);
if(temp->stok<jumlah)
printf("Jumlah pembelian terlalu banyak. Stok %s %d, pembelian
%d.",nama,temp->stok,jumlah);
else{
(temp->stok)-=jumlah;
printf("Selamat,
%d %s berhasil dibeli\n",jumlah,nama);
}
}
}
else
if(opt==3){
exit(1);
}
else printf("Masukan
salah");
printf("\n");
}
return
0;
}
3. Jalankan kedua program :
Selesai. Cukup sekian.SEMoga
bermanfaat.Tetap SEMangat .Sampai jumpa di postingan menarik yang akan datang.
Bye!! :)


0 komentar:
Posting Komentar