Advertisement
yudiwibisono

uas_thread_2

Jun 22nd, 2022
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.34 KB | None | 0 0
  1. // kunci jawaban uas thread
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>  
  5. #include <pthread.h>
  6.  
  7. int counter1=0,counter2=5;
  8.  
  9. const int LIMIT1 = 5;
  10. const int LIMIT2 = 10;
  11.  
  12.  
  13. int data[10];
  14.  
  15. pthread_mutex_t lock;
  16.  
  17. void *fung1(void *vargp)
  18. {
  19.     printf("\n Thread isian 1 mulai\n");
  20.     while (counter1<LIMIT1) {
  21.         //
  22.         // sebelum lock, di bagian ini bisa pindah ke thread lain    
  23.         //
  24.         for (int i = 0; i<=1000;i++) {printf("x");} //code contoh, nanti x,y,a,b bisa diprint tidak berurutan
  25.  
  26.         pthread_mutex_lock(&lock); //lock, dijamin tdk akan pindah ke thread lain        
  27.          printf("Mengisi 1 di posisi %d \n",counter1);
  28.          data[counter1] = 1;  
  29.          counter1++;
  30.         pthread_mutex_unlock(&lock); //unlock
  31.         //
  32.         // setelah lock, di bagian ini bisa pindah ke thread lain    
  33.         //
  34.         for (int i = 0; i<=1000;i++) {printf("y");} //code contoh, nanti x,y,a,b bisa diprint tidak berurutan
  35.     }
  36.     return NULL;
  37. }
  38.  
  39. void *fung2(void *vargp)
  40. {  
  41.     printf("\n Thread isian 2 mulai\n");
  42.    
  43.     while (counter2<LIMIT2) {
  44.         //
  45.         // sebelum lock, di bagian ini bisa pindah ke thread lain    
  46.         //
  47.         for (int i = 0; i<=1000;i++) {printf("a");} //code contoh, nanti x,y,a,b bisa diprint tidak berurutan
  48.  
  49.         pthread_mutex_lock(&lock); //lock, dijamin tdk akan pindah ke thread lain        
  50.          printf("Mengisi 2 di posisi %d \n",counter2);  
  51.          data[counter2] = 2;  
  52.          counter2++;
  53.         pthread_mutex_unlock(&lock); //unlock
  54.         //
  55.         // setelah lock, di bagian ini bisa pindah ke thread lain    
  56.         //
  57.         for (int i = 0; i<=1000;i++) {printf("b");} //code contoh, nanti x,y,a,b bisa diprint tidak berurutan
  58.     }
  59.     return NULL;
  60. }
  61.  
  62.  
  63.    
  64. int main()
  65. {
  66.     pthread_t t1,t2;
  67.  
  68.     //init mutex
  69.     if (pthread_mutex_init(&lock, NULL) != 0)
  70.     {
  71.         printf("\n mutex init gagal\n");
  72.         return 1;
  73.     }
  74.  
  75.     pthread_create(&t1, NULL, fung1, NULL);
  76.     pthread_create(&t2, NULL, fung2, NULL);
  77.     pthread_join(t1, NULL);
  78.     pthread_join(t2, NULL);
  79.  
  80.     //pengisian selesai, print data
  81.     for (int i=0;i<=9;i++) {
  82.         printf("data ke %d = %d\n",i,data[i]);
  83.     }
  84.  
  85.     //destroy mutex
  86.     pthread_mutex_destroy(&lock);
  87.     exit(0);
  88. }
  89.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement