Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // kunci jawaban uas thread
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <pthread.h>
- int counter1=0,counter2=5;
- const int LIMIT1 = 5;
- const int LIMIT2 = 10;
- int data[10];
- pthread_mutex_t lock;
- void *fung1(void *vargp)
- {
- printf("\n Thread isian 1 mulai\n");
- while (counter1<LIMIT1) {
- //
- // sebelum lock, di bagian ini bisa pindah ke thread lain
- //
- for (int i = 0; i<=1000;i++) {printf("x");} //code contoh, nanti x,y,a,b bisa diprint tidak berurutan
- pthread_mutex_lock(&lock); //lock, dijamin tdk akan pindah ke thread lain
- printf("Mengisi 1 di posisi %d \n",counter1);
- data[counter1] = 1;
- counter1++;
- pthread_mutex_unlock(&lock); //unlock
- //
- // setelah lock, di bagian ini bisa pindah ke thread lain
- //
- for (int i = 0; i<=1000;i++) {printf("y");} //code contoh, nanti x,y,a,b bisa diprint tidak berurutan
- }
- return NULL;
- }
- void *fung2(void *vargp)
- {
- printf("\n Thread isian 2 mulai\n");
- while (counter2<LIMIT2) {
- //
- // sebelum lock, di bagian ini bisa pindah ke thread lain
- //
- for (int i = 0; i<=1000;i++) {printf("a");} //code contoh, nanti x,y,a,b bisa diprint tidak berurutan
- pthread_mutex_lock(&lock); //lock, dijamin tdk akan pindah ke thread lain
- printf("Mengisi 2 di posisi %d \n",counter2);
- data[counter2] = 2;
- counter2++;
- pthread_mutex_unlock(&lock); //unlock
- //
- // setelah lock, di bagian ini bisa pindah ke thread lain
- //
- for (int i = 0; i<=1000;i++) {printf("b");} //code contoh, nanti x,y,a,b bisa diprint tidak berurutan
- }
- return NULL;
- }
- int main()
- {
- pthread_t t1,t2;
- //init mutex
- if (pthread_mutex_init(&lock, NULL) != 0)
- {
- printf("\n mutex init gagal\n");
- return 1;
- }
- pthread_create(&t1, NULL, fung1, NULL);
- pthread_create(&t2, NULL, fung2, NULL);
- pthread_join(t1, NULL);
- pthread_join(t2, NULL);
- //pengisian selesai, print data
- for (int i=0;i<=9;i++) {
- printf("data ke %d = %d\n",i,data[i]);
- }
- //destroy mutex
- pthread_mutex_destroy(&lock);
- exit(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement