c 递归锁(重入锁) pthread_cond_wait 死锁

来源:互联网 发布:json文件的注释 编辑:程序博客网 时间:2024/06/16 10:19

//1 thread

pthread_mutex_lock(&mutex);

pthread_mutex_lock(&mutex);


pthread_cond_wait(&cond, &mutex);

pthread_mutex_unlock(&mutex);

pthread_mutex_unlock(&mutex);


//2 thread

pthread_mutex_lock(&mutex);

pthread_cond_signal(&mutex);

pthread_mutex_unlock(&mutex);


//3 init

pthread_mutexattr_t attr;

pthread_mutexattr_init(&attr);

pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);

pthread_mutex_init(&mutex, &attr);


先执行1 thread,然后执行2 thread,会发现在锁定1 thread后,进行pthread_cond_wait操作后,会导致死锁


猜想,应该是pthread_cond_wait只会解锁一层mutex,最后还有一层锁定状态,导致死锁状态


另还有文档说明不要使用pthread_cond_wait在递归锁(重入锁)中






0 0