#include #include #include #include static pthread_mutex_t mutex; static void *thread(void *arg) { printf("[child] lock0\n"); pthread_mutex_lock(&mutex); printf("[child] lock1\n"); pthread_mutex_lock(&mutex); printf("[child] in inner lock!!!\n"); sleep(3); pthread_mutex_unlock(&mutex); printf("[child] in outer lock!!!\n"); pthread_mutex_unlock(&mutex); printf("[child] unlocked!!!\n"); return NULL; } int main(int argc, const char **argv) { pthread_mutexattr_t mutex_attr; pthread_t handle0; pthread_mutexattr_init(&mutex_attr); pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&mutex, &mutex_attr); pthread_create(&handle0, NULL, thread, "thread0"); sleep(1); pthread_mutex_lock(&mutex); printf("[main] inside lock\n"); sleep(1); pthread_mutex_unlock(&mutex); pthread_join(handle0, NULL); printf("[main] finished\n"); return 0; }