Có, bạn có thể thực hiện loại trừ lẫn nhau chỉ với tải bộ nhớ và hướng dẫn lưu trữ. Có một truyền thống lâu dài về việc đưa ra các giải pháp đơn giản liên tiếp cho vấn đề này.
Phiên bản đầu tiên mà tôi biết, được gọi là "Giải pháp của Dekker", đã được giới thiệu trong Dijkstra, Edsger W.; "Hợp tác các quy trình tuần tự", trong F. Genuys, chủ biên, Ngôn ngữ lập trình: Viện nghiên cứu nâng cao NATO , trang 43-112, Nhà xuất bản học thuật, năm 1968 . Đã có hàng tá giải pháp kể từ đó. Tôi sẽ chỉ thảo luận về một vài trong số những người đáng chú ý hơn.
Lamport, Leslie; "Một giải pháp mới cho vấn đề lập trình đồng thời của Dijkstra", Comm ACM 17 (8): 453-455, 1974 giới thiệu "Thuật toán bánh" (vì nó dựa trên sự tương tự của những người lấy số để xác định thứ tự mà họ sẽ phục vụ tại cửa hàng bánh). Một trong những tính năng đặc biệt đáng chú ý của thuật toán này là nó chứng minh rằng không có nguyên tử phần cứng nào được yêu cầu để giải quyết vấn đề loại trừ lẫn nhau. Đọc ghi chồng lên ghi vào cùng một vị trí có thể trả về bất kỳ giá trị nào và thuật toán vẫn hoạt động. Lamport thảo luận về điều này một chút trong phần mô tả của bài báo trên trang chủ của mình .
Giải pháp của Peterson, Peterson, GL; "Những lầm tưởng về vấn đề loại trừ lẫn nhau," Inf. Proc. Lett. , 12 (3): 115-116, 1981 , là một thứ được thiết kế đặc biệt để dễ hiểu và lý do. Cuối cùng, một sở thích đặc biệt của tôi là Lamport, Leslie; "Thuật toán loại trừ lẫn nhau nhanh", ACM Trans. Comp. Sys. , 5 (1): 1-11, 1987. Trong bài báo này, Lamport đã cố gắng tối ưu hóa một giải pháp cho vấn đề loại trừ lẫn nhau trong trường hợp (phổ biến) rằng có rất ít sự tranh chấp cho phần quan trọng. Nó đảm bảo loại trừ lẫn nhau và tự do bế tắc, nhưng không công bằng. Đó là (tôi tin) thuật toán loại trừ lẫn nhau đầu tiên chỉ sử dụng đọc và ghi thông thường có thể đồng bộ hóa bộ xử lý N trong thời gian O (1) khi không có tranh chấp. (Khi có sự tranh chấp, nó lại rơi vào bài kiểm tra O (N).) Anh ta đưa ra một minh chứng không chính thức rằng điều tốt nhất bạn có thể làm trong trường hợp tranh chấp là bảy lần truy cập bộ nhớ. (Dekker và Peterson đều làm điều đó với 4, nhưng họ chỉ có thể xử lý 2 bộ xử lý, khi bạn mở rộng thuật toán của họ thành N, họ phải thêm một lượt truy cập O (N).)
Rõ ràng những người làm việc trong vấn đề giải quyết loại trừ lẫn nhau chỉ sử dụng bộ nhớ đọc và viết bị thất vọng bởi sự hiểu biết (thiếu) của người khác về vấn đề và các giải pháp của nó. Điều này được thể hiện một phần bởi tiêu đề của bài báo của Peterson ("Những huyền thoại về vấn đề loại trừ lẫn nhau") và một phần bởi một ghi chú ngắn mà Lamport xuất bản năm 1991: Lamport, Leslie; "Vấn đề loại trừ lẫn nhau đã được giải quyết", Comm ACM 34 (1): 110, 1991 , mà Lamport mô tả hơi cay đắng trên trang chủ của mình .
Vì vậy, để trả lời câu hỏi thứ hai của bạn: Không. Có nhiều hơn ba loại giải pháp cấp phần cứng cho vấn đề phần quan trọng (chỉ sử dụng tải và lưu trữ là một, các loại khác liên quan đến hướng dẫn so sánh và trao đổi, liên kết tải / lưu trữ có điều kiện hướng dẫn (sử dụng giao thức kết hợp bộ đệm để kiểm tra tính nguyên tử) và hướng dẫn tìm nạp và thêm.) Theo một nghĩa khác, thực sự chỉ có một loại giải pháp: những giải pháp liên quan đến việc đưa ra một loạt các quy trình không đồng bộ để thống nhất theo thứ tự các sự kiện toàn cầu .
(Lưu ý rằng câu trả lời này là bản chỉnh sửa (bao quát) của câu trả lời trước đó tôi đã đưa ra cho một câu hỏi rất khác .)