Предполагая, что поток успешно вызывает pthread_mutex_lock
, все еще возможно, что вызов pthread_mutex_unlock
в том же потоке завершится неудачей? Если да, можете ли вы что-то с этим сделать, кроме прерывания потока?
if(pthread_mutex_lock(&m) == 0)
{
// got the lock, let's do some work
if(pthread_mutex_unlock(&m) != 0) // can this really fail?
{
// ok, we have a lock but can't unlock it?
}
}
С этой страницы , возможные ошибки для pthread_mutex_unlock()
:
[EINVAL]
Значение, указанное мьютексом, не относится к инициализированному
объект мьютекса.
Если блокировка прошла успешно, это вряд ли даст сбой.
[EAGAIN]
Мьютекс не может быть получен, потому что максимальное количество
Рекурсивные блокировки для мьютекса были превышены.
В самом деле? Для разблокировки?
Функция pthread_mutex_unlock () может завершиться ошибкой, если:
[EPERM]
Текущему потоку не принадлежит мьютекс.
Опять же, если блокировка прошла успешно, этого также не должно происходить.
Итак, я думаю, что в случае успешной блокировки разблокировка в этой ситуации никогда не должна прерываться, делая проверку ошибок и последующую обработку кода бессмысленной.