Kamis, 08 Juni 2017

FUNGSI DASAR THREAD

PRAKTIKUM ORGANISASI KOMPUTER DAN SISTEM OPERASI
-FUNGSI DASAR THREAD-



Disusun Oleh :

Novenia Eka Warestika  : 065001600015




FAKULTAS TEKNOLOGI INDUSTRI
JURUSAN TEKNIK INFORMATIKA
UNIVERSITAS TRISAKTI              
2017


I              JUDUL PRAKTIKUM : Fungsi Dasar Thread
II            TUJUAN PRAKTIKUM : Untuk menyelesaikan praktikum sebelas matakuliah Organisasi computer dan Sistem Operasi. Selain itu, hal ini juga beguna sebagai panduan umum penggunaan fungsi thread terminal pada operasi sistem linux.
III          TEORI SINGKAT
Thread adalah sebuah alur kontrol dari sebuah proses. Suatu proses yang multithreaded 
mengandung beberapa perbedaan alur kontrol dengan ruang alamat yang sama. Keuntungan dari multithreaded meliputi peningkatan respon dari user, pembagian sumber daya proses, ekonomis, dan kemampuan untuk mengambil keuntungan dari arsitektur multiprosesor. 
User level thread adalah thread yang tampak oleh programmer dan tidak diketahui oleh kernel. 
User level thread secara tipikal dikelola oleh sebuah library thread di ruang user. Kernel level thread didukung dan dikelola oleh kernel sistem operasi. Secara umum, user level thread lebih cepat dalam pembuatan dan pengelolaan dari pada kernel thread. Ada tiga perbedaan tipe dari model 
yang berhubungan dengan user dan kernel thread atau yang biasa disebut Multithreading Models yaitu :
1)Model many to one: memetakan beberapa user level thread hanya ke satu buah kernel thread.
2)Model one to one: memetakan setiap user thread ke dalam satu kernel thread. Berakhir.
3)Model many to many: mengizinkan pengembang untuk membuat user thread sebanyak mungkin, konkurensi tidak dapat tercapai karena hanya satu thread yang dapat dijadualkan oleh kernel dalam satu waktu.
Untuk meningkatkan kemampuan Thread Linux, dukungan kernel dan penulisan ulang pustaka thread sangat diperlukan. Dua project yang saling bersaing menjawab tantangan ini. Sebuah tim yang terdiri dari pengembang dari IBM membuat NGPT (Next Generation POSIX Threads). Sementara pengembang dariRed Hat membuat NPTL (Native POSIX Thread Library).Sebenarnya Linux tidak membedakan antara proses dan thread. Dalam kenyataannya, Linux lebih menggunakan istilah task dibandingkan proses dan thread ketika merujuk kepada pengaturan alur pengontrolan di dalam program.

CARA PERCOBAAN

  1. Buka terminal pada Linux
  2. Buat file baru dengan cara tulis Vi thrdcreat.c



  1. Tulis sourcodenya seperti gambar berikut

    /* 
     * thrdcreat.c - Illustrate creating a thread 
     */  
    #include <stdio.h>  
    #include <stdlib.h>  
    #include <unistd.h>  
    #include <pthread.h>  
      
    void task1(int *counter);  
    void task2(int *counter);  
    void cleanup(int counter1, int counter2);  
      
    int g1 = 0;  
    int g2 = 0;  
      
    int main(int argc, char *argv[])  
    {  
        pthread_t thrd1, thrd2;  
        int ret;  
      
        /* Create the first thread */  
        ret = pthread_create(&thrd1, NULL, (void *)task1, (void *)&g1);  
        if(ret) {  
            perror("pthread_create: task1");  
            exit(EXIT_FAILURE);  
        }  
        /* Create the second thread */  
        ret = pthread_create(&thrd2, NULL, (void *)task2, (void *)&g2);  
        if(ret) {  
            perror("pthread_create: task2");  
            exit(EXIT_FAILURE);  
        }  
      
        pthread_join(thrd2, NULL);  
        pthread_join(thrd1, NULL);  
          
        cleanup(g1, g2);  
      
        exit(EXIT_SUCCESS);  
    }  
      
    void task1(int *counter)  
    {  
        while(*counter < 5) {  
            printf("task1 count: %d\n", *counter);  
            (*counter)++;  
            sleep(1);  
        }  
    }  
      
    void task2(int *counter)  
    {  
        while(*counter < 5) {  
            printf("task2 count: %d\n", *counter);  
            (*counter)++;  
        }  
    }  
      
    void cleanup(int counter1, int counter2)  
    {  
        printf("total iterations: %d\n", counter1 + counter2);  
    }  

  1. Keluar dari editor dan save dengan perintah :wq
  2. Compile file thrdcreat.c



  1. Jalankan thrdcreat1.c dan lihat outputnya



  1. Buat file baru dengan cara tulis Vi thrdcancel.c



  1. Tulis sourcodenya seperti gambar berikut

    /* 
     * thrdcancel.c - Illustrate thread cancellation 
     */  
    #include <stdio.h>  
    #include <stdlib.h>  
    #include <unistd.h>  
    #include <pthread.h>  
      
    void task1(int *counter);  
    void task2(int *counter);  
    void cleanup(int counter1, int counter2);  
      
    int g1 = 0;  
    int g2 = 0;  
      
    int main(int argc, char *argv[])  
    {  
        pthread_t thrd1, thrd2;  
        int ret;  
      
        /* Create the first thread */  
        ret = pthread_create(&thrd1, NULL, (void *)task1, (void *)&g1);  
        if(ret) {  
            perror("pthread_create: task1");  
            exit(EXIT_FAILURE);  
        }  
        /* Create the second thread */  
        ret = pthread_create(&thrd2, NULL, (void *)task2, (void *)&g2);  
        if(ret) {  
            perror("pthread_create: task2");  
            exit(EXIT_FAILURE);  
        }  
      
        pthread_join(thrd2, NULL);  
        pthread_cancel(thrd1); /* Cancel the first thread */  
        pthread_join(thrd1, NULL);  
          
        cleanup(g1, g2);  
      
        exit(EXIT_SUCCESS);  
    }  
      
    void task1(int *counter)  
    {  
        /* Disable thread cancellation */  
        pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);  
        while(*counter < 5) {  
            printf("task1 count: %d\n", *counter);  
            (*counter)++;  
            sleep(1);  
        }  
        /* Enable thread cancellation */  
        pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);  
    }  
      
    void task2(int *counter)  
    {  
        while(*counter < 5) {  
            printf("task2 count: %d\n", *counter);  
            (*counter)++;  
        }  
    }  
      
    void cleanup(int counter1, int counter2)  
    {  
        printf("total iterations: %d\n", counter1 + counter2);  
    }  



  1. Keluar dari editor dan save dengan perintah :wq
  2. Compile file thrdcancel.c



  1. Jalankan thrdcancel1.c dan lihat outputnya



  1. Buat file baru dengan cara tulis Vi mutex.c



  1. Tulis sourcodenya seperti gambar berikut
/* 
 * mutex.c - Using mutexes 
 */  
#include <stdio.h>  
#include <stdlib.h>  
#include <unistd.h>  
#include <pthread.h>  
#include <errno.h>  
  
#define INDEX 10000000  
  
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;  
long int ticks;  
time_t end_time;  
  
/* An "index" thread to increment a counter */  
void idx_th(void *arg);  
  
/* A "monitor" thread to check the counter's value */  
void mon_th(void *arg);  
  
int main (int argc, char *argv[])  
{  
    pthread_t idx_th_id;  
    pthread_t mon_th_id;  
    int ret;  
  
    end_time = time(NULL) + 30; /* 30 second runtime*/  
  
    /* Create two threads */  
    ret = pthread_create(&idx_th_id, NULL, (void *)idx_th, NULL);  
    if (ret != 0) {  
        perror("pthread_create: idx_th");  
        exit(EXIT_FAILURE);  
    }  
    ret = pthread_create(&mon_th_id, NULL, (void *)mon_th, NULL);  
    if (ret != 0) {  
        perror("pthread_create: mon_th");  
        exit(EXIT_FAILURE);  
    }  
  
    pthread_join (idx_th_id, NULL);  
    pthread_join (mon_th_id, NULL);  
  
    exit(EXIT_SUCCESS);  
}  
  
void idx_th(void *arg)  
{  
    long l;  
  
    while(time(NULL) < end_time) {  
        /* Lock the mutex */  
        if(pthread_mutex_lock(&mutex) != 0) {  
            perror("pthread_mutex_lock");  
            exit(EXIT_FAILURE);  
        }  
  
        /*.Increment the counter */  
        for(l = 0l; l < INDEX; ++l)  
            ++ticks;  
  
        /* Now we're done, so unlock the mutex */  
        if(pthread_mutex_unlock (&mutex) != 0) {  
            perror("pthread_mutex_unlock");  
            exit(EXIT_FAILURE);  
        }      
        sleep(1);  
    }  
}  
  
void mon_th(void *arg)  
{  
    int nolock = 0;  
    int ret;  
  
    while(time(NULL) < end_time) {  
        /* Wake up every two seconds */  
        sleep(2);  
        /* Try to lock the mutex */  
        ret = pthread_mutex_trylock(&mutex);  
        if(ret != EBUSY) {  
            if(ret != 0) {  
                perror("pthread_mutex_trylock");  
                exit(EXIT_FAILURE);  
            }  
            printf ("mon_th: got lock at %ld ticks\n", ticks);  
            if(pthread_mutex_unlock(&mutex) != 0) {  
                perror("pthread_mutex_unlock");  
                exit(EXIT_FAILURE);  
            }  
  
        } else {  
            /* Number of times mutex was locked */  
            nolock++;  
        }  
    }  
    printf ("mon_th missed lock %d times\n", nolock);  
}


  1. Keluar dari editor dan save dengan perintah :wq
  2. Compile file mutex.c



  1. Jalankan mutex.c dan lihat outputnya




Data Percobaan








KESIMPULAN
          
Thread merupakan sebuah alur kontrol proses yang dapat dijadwalkan pengeksekusiannya oleh sistem operasi. Selanjutnya, bayangkan sebuah program main mempunyai berbagai prosedur (fungsi) dan fungsi-fungsi tersebut dapat dijalankan secara serentak dan atau bebas dijalankan oleh sistem operasi. Dan itulah yang disebut sebagai multithread.


Full Video:




2 komentar:

  1. SEGA | Play online for real money and win in the sands casino!
    Discover the thrill of SEGA at Sands Casino. septcasino Play Slots, Table Games, and more for real money at Sands Casino. 온카지노 Sign up 바카라 사이트 or login today!

    BalasHapus
  2. Fungsi Dasar Thread ~ N.E.W >>>>> Download Now

    >>>>> Download Full

    Fungsi Dasar Thread ~ N.E.W >>>>> Download LINK

    >>>>> Download Now

    Fungsi Dasar Thread ~ N.E.W >>>>> Download Full

    >>>>> Download LINK

    BalasHapus

Social Profiles

Twitter Facebook Google Plus LinkedIn RSS Feed Email Pinterest

Teknik Informatika

Teknik Informatika

UNIVERSITAS TRISAKTI


Popular Posts

Categories

Total Tayangan Halaman

Diberdayakan oleh Blogger.

BTemplates.com

Blogroll

Homer Simpson

About

Copyright © N.E.W | Powered by Blogger
Design by Lizard Themes | Blogger Theme by Lasantha - PremiumBloggerTemplates.com