#include #include #include void *f(void *p) { static int init; static pthread_mutex_t m; pthread_mutexattr_t ma; if (!init) { init = 1; pthread_mutexattr_init(&ma); pthread_mutexattr_settype(&ma, PTHREAD_MUTEX_ERRORCHECK); pthread_mutex_init(&m, &ma); pthread_mutex_lock(&m); pthread_mutexattr_destroy(&ma); return 0; } if (!pthread_mutex_unlock(&m)) { printf("unlocked mutex via false ownership\n"); exit(1); } return 0; } int main() { int i; pthread_t td; for (i=0; i<100000; i++) { pthread_create(&td, 0, f, 0); pthread_join(td, 0); } return 0; }