Tôi đang đọc Nghệ thuật lập trình đa bộ xử lý và cố gắng hiểu khái niệm về khóa không nhất quán của họ. Cụ thể, ở trang 37 , định nghĩa 2.8.1 của khóa không nhất quán đối với tôi không rõ ràng, cũng như Bổ đề 2.8.1.
Định nghĩa 2.8.1. Trạng thái đối tượng Khóa không nhất quán ở bất kỳ trạng thái toàn cầu nào có một số luồng nằm trong phần quan trọng, nhưng trạng thái khóa tương thích với trạng thái toàn cầu trong đó không có luồng nào ở phần quan trọng hoặc đang cố gắng nhập.
Bổ đề 2.8.1 Không có triển khai Khóa không có bế tắc có thể vào trạng thái không nhất quán.
Bằng chứng:
Giả sử đối tượng Khóa ở trạng thái không nhất quán s, trong đó không có luồng nào trong phần quan trọng hoặc cố gắng nhập. Nếu luồng B cố gắng vào phần quan trọng, cuối cùng nó phải thành công, vì việc thực hiện là không có bế tắc.
Giả sử đối tượng Khóa ở trạng thái không nhất quán s, trong đó A nằm trong phần quan trọng. Nếu luồng B cố gắng vào phần quan trọng, nó phải chặn cho đến khi A rời khỏi. Chúng tôi có một mâu thuẫn, bởi vì B không thể xác định liệu A có nằm trong phần quan trọng hay không.
Những gì tôi không hiểu:
- Có phải không nhất quán chỉ có nghĩa là nếu một chủ đề nằm trong một phần quan trọng, không có cách nào các chủ đề khác có thể biết về nó?
- Những gì mâu thuẫn trong một bằng chứng bổ đề? Nói chủ đề A ở trong một phần quan trọng và khóa ở trạng thái không nhất quán. Điều gì ngăn một chủ đề khác ghi đè lên trạng thái của khóa và có được nó?