#include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> /* Test of the mechanism for showing all locks held by a thread -- one thread has a lock, the other doesn't. Running w/ command line args switches the has/has-not thread around, so as to test lockset retention in both the history mechanism and the primary errors. */ pthread_mutex_t mx = PTHREAD_MUTEX_INITIALIZER; int x = 0; void* child_fn ( void* arg ) { if (arg) pthread_mutex_lock(&mx); x = 1; if (arg) pthread_mutex_unlock(&mx); return NULL; } int main ( int argc, char** argv ) { int sw = argc > 1; pthread_t child1, child2; if (pthread_create(&child1, NULL, child_fn, (void*)(long)(sw ? 0 : 1))) { perror("pthread_create1"); exit(1); } sleep(1); /* ensure repeatable results */ if (pthread_create(&child2, NULL, child_fn, (void*)(long)(sw ? 1 : 0))) { perror("pthread_create1"); exit(1); } if (pthread_join(child1, NULL)) { perror("pthread join1"); exit(1); } if (pthread_join(child2, NULL)) { perror("pthread join2"); exit(1); } return 0; }