Tôi đã nghiên cứu Nghệ thuật lập trình đa bộ xử lý 1 và văn bản của họ thiếu rõ ràng, giống như cuốn sách bạn đề cập đến. Dưới đây là một số trích dẫn từ TAMPP:
Trích dẫn 1 (Định nghĩa về khóa miễn phí)
Một phương thức không khóa nếu nó đảm bảo rằng vô cùng thường xuyên một số cuộc gọi phương thức kết thúc trong một số bước hữu hạn.
Trích dẫn 2 (Định nghĩa về không chặn)
một yêu cầu đang chờ xử lý của một phương thức tổng thể không bao giờ được yêu cầu để chờ một lệnh gọi đang chờ xử lý khác hoàn thành.
Trích dẫn 3 (tuyên bố rằng khóa miễn phí là không chặn)
Các điều kiện tiến trình không chặn không phải chờ và không khóa đảm bảo rằng toàn bộ tính toán tạo ra tiến trình, độc lập với cách hệ thống lên lịch các luồng.
Vấn đề là yêu cầu trong Trích dẫn 3 rõ ràng không tuân theo định nghĩa trong Trích dẫn 1. Như đã đề cập, một hàng đợi được đồng bộ hóa dường như thỏa mãn Trích dẫn 1: thường thì một số phương pháp sẽ có được thành công khóa và hoàn tất.
Đặc biệt lưu ý cụm từ khá mơ hồ trong Trích dẫn 3: "độc lập với cách hệ thống lên lịch các luồng". Đây không phải là trước bởi bất kỳ loại mô tả chính thức của "hệ thống thread-lịch", vì vậy chúng tôi còn lại để tái tạo thuộc tính của nó dựa trên những định kiến của chúng tôi về những gì các định nghĩa nên có ý nghĩa:
- hệ thống luôn thực hiện các hướng dẫn của một số luồng;
- nó có thể không bao giờ thực hiện hướng dẫn của bất kỳ cho chủ đề;
- tất cả các chủ đề đang gọi phương thức đang xem xét.
Trên một hệ thống như vậy, một phương thức chặn không thể bị khóa: nếu luồng giữ khóa không bao giờ được lên lịch thực hiện lại, sẽ không có luồng nào khác có thể hoàn thành việc gọi phương thức của nó trong một số bước hữu hạn, nhưng sẽ có một số chủ đề đang thực hiện các bước của phương thức. Đối với một hệ thống thực tế hơn, một hệ thống đảm bảo cung cấp thời gian CPU cho từng luồng cuối cùng, định nghĩa phải bao gồm rõ ràng thuộc tính không chặn:
Định nghĩa chính xác của khóa miễn phí
Một phương thức không khóa nếu nó không chặn và, ngoài ra, đảm bảo rằng vô cùng thường xuyên một số cuộc gọi phương thức kết thúc trong một số bước hữu hạn.
1 Maurice Herlihy, Nir Shavit, Nghệ thuật lập trình đa xử lý, Elsevier 2008, trang 58-60