2016-03-25 3 views
0

Блокировка мьютекс успешно или не случайно, и не либо:Случайная ошибка блокировки мьютекса

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; 
    } 

Почему?

+0

OT: Это должно быть 'int main (void)' – alk

ответ

1

Вы не инициализируете attr. Его содержимое не определено.

pthread_mutexattr_init См:

ОПИСАНИЕ

pthread_mutexattr_init() Функция инициализирует мьютекс атрибуты объект attr со значением по умолчанию для всех атрибутов, определенных реализацией.

Смежные вопросы