#include
#include
#include // Untuk exit, dll.
// 1. Deklarasi Mutex Global
pthread_mutex_t lock;
int counter = 0;
void* increment(void* arg) {
for (int i = 0; i < 100000; i++) {
// 2. Kunci (Lock) Mutex sebelum mengakses critical section
pthread_mutex_lock(&lock);
// Critical Section (Operasi yang harus atomik)
counter++;
// 3. Buka Kunci (Unlock) Mutex setelah selesai
pthread_mutex_unlock(&lock);
}
return NULL;
}
int main() {
pthread_t t1, t2;
// 4. Inisialisasi Mutex
if (pthread_mutex_init(&lock, NULL) != 0) {
printf("\nMutex init failed\n");
return 1;
}
pthread_create(&t1, NULL, increment, NULL);
pthread_create(&t2, NULL, increment, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
// 5. Hancurkan Mutex setelah tidak digunakan lagi
pthread_mutex_destroy(&lock);
printf("Final counter: %d\n", counter);
// Output yang diharapkan dan seharusnya konsisten adalah: 200000
return 0;
}