Jumat, 06 November 2015

Thread dan IPC

Thread adalah bagian terkecil dari suatu proses yang bisa dijadwalkan oleh sistem operasi.
Thread dibagi menjadi 2, yaitu :

  1. Single Threading, proses yang berjalan hanya memiliki 1 thread yang berjalan
  2. Multi Threading, proses yang berjalan memiliki lebih dari 1 thread (berjalan secara bersamaan)

Misalkan kita ingin menggunakan thread dimana kita dapat memutar 2 lagu secara bersama - sama.
Contoh Program :

#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>

pthread_t tid[2];
char lagu1[20],lagu2[20],tmp[50];

void* play(void *args) {
pthread_t id=pthread_self();
if(pthread_equal(id,tid[0])) {
snprintf(tmp, sizeof(tmp), "cvlc %s.mp3", lagu1);
system(tmp);
}
else if(pthread_equal(id,tid[1])) {
snprintf(tmp, sizeof(tmp), "cvlc %s.mp3", lagu2);
system(tmp);
}
return NULL;
}

int main(void) {
int err,i=0;

printf("\nMasukkan judul lagu pertama : ");
scanf("%s",lagu1);

printf("\nMasukkan judul lagu kedua : ");
scanf("%s",lagu2);

while(i<2) {
err=pthread_create(&(tid[i]),NULL,&play,NULL);
if(err!=0) printf("\ncan't create thread : [%s]",strerror(err));
else i++;
}

pthread_join(tid[0],NULL);
pthread_join(tid[1],NULL);

return 0;
}

IPC (Interprocess Communication) adalah mekanisme pertukaran data antara satu proses dengan proses lainnya, baik dalam komputer yang sama atau komputer yang jauh (terhubung melalui jaringan).
Beberapa contoh IPC :

  1. Pipes
  2. Message Queue
  3. Shared Memory
  4. Socket

Misalkan kita ingin menggunakan pipes dimana kita berkirim pesan dari terminal 1 ke terminal lainnya.

Program 1 (pengirim) :

#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<unistd.h>

int main() {
int fd;
char *myfifo = "/tmp/myfifo";

mkfifo(myfifo,0666);

fd = open(myfifo, O_WRONLY);
write(fd, "Gede Wayan Dharmawan",sizeof("Gede Wayan Dharmawan"));
close(fd);

unlink(myfifo);

return 0;
}

Program 2 (penerima) :

#include<fcntl.h> #include<stdio.h> #include<sys/stat.h> #include<unistd.h> #define MAX_BUF 1024 int main() { int fd; char *myfifo = "/tmp/myfifo"; char buf[MAX_BUF]; fd = open(myfifo, O_RDONLY); read(fd,buf,MAX_BUF); printf("Isi Pesan : %s\n",buf); close(fd); return 0; }

Tidak ada komentar:

Posting Komentar