C - атрибуты мьютекса

Могу ли я создать и использовать только один атрибут мьютекса для инициализации нескольких рекурсивных мьютексов? Или мне нужно создать один атрибут мьютекса для каждого мьютекса, который я хочу создать? В принципе я следующий код правильный?

int err;
int bufferLength = 10;
pthread_mutexattr_t recursiveAttr;
pthread_mutex_t mutexes[bufferLength];

for(int index = 0; index < bufferLength; index++){
    err = pthread_mutex_init(&mutexes[i], &recursiveAttr);
    if(err != 0){
        perror("Error initializing the mutex");
    }
}

1 ответ

Решение

Вы можете использовать один и тот же объект атрибута для нескольких мьютексов.

Обратите внимание, что pthread_mutexattr_t используемый вами объект должен быть инициализирован сам. Для инициализации pthread_mutexattr_t ты должен использовать pthread_mutexattr_init (и в конце концов, pthread_mutexattr_destroy), оба из которых должны быть сделаны один раз. Ваш текущий код не делает таких вызовов, и должен сделать это, чтобы быть совместимым.

Другие вопросы по тегам