Следует ли избегать статической инициализации pthread_mutex с использованием PTHREAD_MUTEX_INITIALIZER? - PullRequest
2 голосов
/ 24 августа 2010

Известны ли проблемы статической инициализации мьютексов pthread с использованием PTHREAD_MUTEX_INITIALIZER и передачи их напрямую для блокировки?

Я читал на некоторых сайтах, что это не может быть гарантировано на всех платформах, а также на странице справки есть примечание ниже:

Примечание. Инициализация мьютекса с использованием PTHREAD_MUTEX_INITIALIZER не приводит к немедленной инициализации мьютекса. Вместо этого при первом использовании функции pthread_mutex_lock () или pthread_mutex_trylock () переходят в медленный путь и вызывают инициализацию мьютекса. Поскольку мьютекс не является простым объектом памяти и требует, чтобы система выделяла некоторые ресурсы, попытка вызова pthread_mutex_destroy () или pthread_mutex_unlock () для мьютекса, статически инициализированного с помощью PTHREAD_MUTEX_INITIALER и еще не заблокированного, приводит к ошибке EINVAL .

Итак, если два потока вызовут pthread_mutex_lock после статической инициализации, это приведет к любой проблеме?

1 Ответ

2 голосов
/ 24 августа 2010

Я думаю, что это не проблема.Данный поток POSIX определяет API, но не реализацию.это не проблема, если некоторые реализации выбирают какой-то особый подход.Но правильное поведение вызова pthread_mutex_lock должно быть гарантировано.

...