互斥锁上的随机错误

时间:2016-03-25 14:12:10

标签: c pthreads mutex

互斥锁成功或随机失败,并且失败:

Invalid argument

tpp.c:62: __pthread_tpp_change_priority: Assertion `new_prio == -1 || (new_prio >= __sched_fifo_min_prio && new_prio <= __sched_fifo_max_prio)' failed.

代码是非常基本的,你可以在这里看到:

pthread_mutex_t mutex;
main() {
  int ret;
  pthread_mutexattr_t attr;
  pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
  ret = pthread_mutex_init(&mutex, &attr);
  if (ret != 0) {
    printf("pthread_mutex_init\n");
    return 1;
  }
  ret = pthread_mutex_lock(&mutex);
  if (ret != 0) {
    printf("mutex_lock failed %s\n", strerror(ret));
    return 1;
  }
  ret = pthread_mutex_unlock(&mutex);
  if (ret != 0) {
    printf("mutex_unlock failed %s\n", strerror(ret));
    return -1;
  }

为什么?

1 个答案:

答案 0 :(得分:1)

您尚未初始化attr。其内容未定义。

请参阅pthread_mutexattr_init

  

说明

     

函数pthread_mutexattr_init()初始化互斥锁属性   对象attr,其中包含所有已定义属性的默认值   通过实施。