Giả sử một chuỗi thành công gọi pthread_mutex_lock
, bạn vẫn có thể gọi tới số pthread_mutex_unlock
trong cùng một chuỗi đó sẽ không thành công? Nếu vậy, bạn có thể thực sự làm điều gì đó về nó ngoài việc hủy bỏ các chủ đề?Làm cách nào để xử lý các lỗi 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?
}
}
Từ this page, lỗi có thể cho pthread_mutex_unlock()
là:
[EINVAL] Giá trị theo quy định của mutex không đề cập đến một khởi đối tượng mutex.
Nếu khóa thành công thì điều này có thể không thành công.
[EAGAIN] Mutex có thể không được mua lại bởi vì số lượng tối đa khóa đệ quy cho mutex đã bị vượt quá.
Thật sao? Để mở khóa?
Các pthread_mutex_unlock() chức năng có thể thất bại nếu:
[EPERM] Các chủ đề hiện tại không sở hữu mutex.
Một lần nữa, nếu khóa thành công thì điều này cũng sẽ không xảy ra. Vì vậy, suy nghĩ của tôi là nếu có một khóa thành công thì trong tình huống này mở khóa sẽ không bao giờ thất bại trong việc kiểm tra lỗi và mã xử lý tiếp theo là vô nghĩa.
Cảm ơn, đó cũng là suy nghĩ của tôi. Tôi đã cập nhật câu hỏi để hy vọng làm rõ hơn tại sao tôi hỏi. Tôi muốn giữ để xem liệu tôi có thể nhận được bất kỳ đầu vào nào khác trước khi tôi chấp nhận câu trả lời hay không. –