#include #include #include int main(int argc, char *argv[]) { pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutexattr_t attr; int ret; ret = pthread_mutexattr_init(&attr); if (ret) { printf("pthread_mutexattr_init failed\n"); return 0; } ret = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); if (ret) { printf("pthread_mutexattr_settype failed\n"); return 0; } ret = pthread_mutexattr_setprotocol(&attr, PTHREAD_PRIO_INHERIT); if (ret) { printf("pthread_mutexattr_setprotocol failed\n"); return 0; } ret = pthread_mutex_init(&mutex, &attr); if (ret == ENOTSUP) { printf("pthread_mutex_init failed\n"); } while (1) { fprintf(stderr, "lock... "); pthread_mutex_lock(&mutex); fprintf(stderr, "acquired... "); sleep(1); pthread_mutex_unlock(&mutex); fprintf(stderr, "released...\n"); } pthread_mutex_destroy(&mutex); return 0; }