为什么即使启用了ERRORCHECK,对于连续的pthread_mutex_lock也不会返回EDEADLK?

我正在尝试使用pthread API,并且想了解一些东西。

据我了解,以下代码应生成EDEADLK错误代码,但我收到未定义的错误:

mutex lock: : Undefined error: 0
void case3_error_checking_mutex()
{
  pthread_mutexattr_t attr;
  pthread_mutexattr_init(&attr);
  pthread_mutexattr_settype(&attr,pthREAD_MUTEX_ERRORCHECK);

  pthread_mutex_t mtx;
  pthread_mutex_init(&mtx,&attr);
  pthread_mutex_lock(&mtx);
  if (pthread_mutex_lock(&mtx) != 0) {
      perror("mutex lock: ");
      return;
  }
  pthread_mutex_unlock(&mtx);
}

有什么想法吗?

谢谢!

PS:我知道什么是递归互斥,我知道什么是死锁,我知道这是丑陋的代码,等等。请不要对此类内容发表评论。对我来说,这是纯粹的实验性代码,可以更好地了解pthread API的细节。

iCMS 回答:为什么即使启用了ERRORCHECK,对于连续的pthread_mutex_lock也不会返回EDEADLK?

我发现未设置errno。以下解决了问题。

const int ret = pthread_mutex_lock(&mtx);
if (ret != 0) {
   errno = ret;
   perror("mutex lock: ");
   return;
}
mutex lock: : Resource deadlock avoided
本文链接:https://www.f2er.com/1741157.html

大家都在问