int main(void) { int ret; int i, flag; pthread_mutex_t *global_mutex; int sleep_period = 100000; if ((global_mutex = shmem_mutex_init()) == NULL) exit(-2); while (1) { ret = pthread_mutex_trylock(global_mutex); switch (ret) { case EBUSY: printf("a contention detected\n"); usleep(sleep_period); break; case EINVAL: printf("uninitialized mutex\n"); break; case EFAULT: printf("invalid pointer\n"); break; case 0: printf("got the lock\n"); long_running_task(); pthread_mutex_unlock(global_mutex); break; default: /* do nothing */ break; } } return 0; }
int main(void) { int ret; int i, flag; pthread_mutex_t *global_mutex; if ((global_mutex = shmem_mutex_init()) == NULL) exit(-2); while (1) { pthread_mutex_lock(global_mutex); long_running_task(); pthread_mutex_unlock(global_mutex); } return 0; }