csci4061/notes/11-threads-code/mutex_busy.c

40 lines
1.1 KiB
C
Raw Normal View History

2018-01-29 23:28:37 +00:00
// Demonstrates that pthread_mutex_lock() is not a busy wait. Two
// threads obtain a lock and then sleep for a second. The total
// runtime should be about 2 seconds as only one thread can have the
// lock at a time. If lock waiting was busy, the user time should be
// about 1s as one thread busily waits for the lock. However user time
// is usually measured in the thousandths of seconds as threads sleep
// then wake up when the the lock is available.
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
int glob = 1;
pthread_mutex_t glob_lock;
void *doit(void *param){
pthread_mutex_lock(&glob_lock);
glob = glob*2;
sleep(1);
pthread_mutex_unlock(&glob_lock);
return NULL;
}
int main(){
printf("BEFORE glob: %d\n",glob);
pthread_mutex_init(&glob_lock, NULL);
pthread_t thread_1;
pthread_create(&thread_1, NULL, doit, NULL);
pthread_t thread_2;
pthread_create(&thread_2, NULL, doit, NULL);
pthread_join(thread_1, (void **) NULL);
pthread_join(thread_2, (void **) NULL);
printf("AFTER glob: %d\n",glob);
pthread_mutex_destroy(&glob_lock);
return 0;
}