Thread dibagi menjadi 2, yaitu :
- Single Threading, proses yang berjalan hanya memiliki 1 thread yang berjalan
- 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 :
- Pipes
- Message Queue
- Shared Memory
- 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