В приведённом фрагменте на C (pthread):
pthread_mutex_t m

26 Мая в 10:12
13 +1
0
Ответы
1
Это объявление переменной типа мьютекс: вы просто выделяете объект `pthread_mutex_t m`, но не инициализируете его — использование без инициализации приводит к неопределённому поведению.
Коротко — варианты правильной инициализации и примечания:
- Статическая инициализация (для объектов с длительностью хранения static/global):
`pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;`
- Динамическая/рутинная инициализация (например, для автоматических локальных переменных):
`pthread_mutex_t m;`
`pthread_mutex_init(&m, NULL);`
Не забудьте при завершении:
`pthread_mutex_destroy(&m);`
- Если нужны нестандартные атрибуты (например, recursive), создайте `pthread_mutexattr_t` и передайте его в `pthread_mutex_init`.
Примечания:
- Глобальные переменные в C нулевыми будут при старте, но нуль не эквивалентен корректно инициализованному мьютексу — используйте `PTHREAD_MUTEX_INITIALIZER` или `pthread_mutex_init`.
- Нельзя использовать мьютекс до инициализации; после `pthread_mutex_destroy` объект снова нельзя использовать до повторной инициализации.
26 Мая в 10:42
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир