Câu trả lời:
Để đảm bảo chúng tôi ở trên cùng một trang, trước tiên chúng ta hãy xem xét ba định nghĩa sau:
Định nghĩa. Test-and-set là một hướng dẫn đọc-sửa-ghi trên một số thanh ghi nhị phân (giả sử 0 và 1 là các giá trị có thể) trong đó một luồng lấy giá trị cũ và ghi 1.
Định nghĩa. Đạt được sự đồng thuận giữa luồng iff tất cả n luồng quyết định trên cùng một giá trị (yêu cầu tính nhất quán) và tất cả các luồng quyết định giá trị thực sự được đề xuất bởi một trong các luồng (yêu cầu hợp lệ).
Khiếm khuyết. Một giao thức đồng thuận là iff chờ miễn phí mỗi cuộc gọi phương thức kết thúc trong một số bước hữu hạn.
Bây giờ làm theo hai bản phác thảo bằng chứng.
Yêu cầu 1. Số lượng đồng thuận của thử nghiệm và thiết lập ít nhất là 2. Bằng chứng. Giả sử rằng chúng ta có hai luồng 0 và 1 cần đạt được sự đồng thuận. Chúng ta có thể làm điều này bằng cách cho phép mỗi luồng theo giao thức đồng thuận bên dưới:
Bạn có thể tự kiểm chứng rằng sự đồng thuận và chờ đợi được thỏa mãn.
(Đối với bằng chứng tiếp theo, tôi sẽ lồng một số bằng chứng và định nghĩa vì tôi nghĩ nó sẽ giúp việc theo dõi dễ dàng hơn.)
Yêu cầu 2. Số lượng đồng thuận của thử nghiệm và thiết lập nhiều nhất là 2. Bằng chứng. Do mâu thuẫn. Giả sử chúng ta có ba luồng , B và C muốn quyết định các giá trị a , b và c tương ứng và chúng ta có một số giao thức đồng thuận chờ đợi hợp lệ được triển khai bằng cách sử dụng thử và đọc (và đọc và ghi nguyên tử ).
Chúng ta có thể hình dung quá trình đồng thuận như một cây được định hướng, trong đó:
Định nghĩa. Hãy để một nhà nước là đa trị nếu kết quả của quá trình đồng thuận chưa được xác định. Nói cách khác, không phải tất cả các xen kẽ có thể có của các di chuyển còn lại đều dẫn đến cùng một kết quả. Hãy để một nhà nước thống nhất khi kết quả của quá trình đồng thuận được xác định.
Rễ là đa trị. Bằng chứng. Nếu chỉ có một luồng hoạt động và các luồng khác nằm im lìm mãi mãi, thì X sẽ hoàn thành trong một số bước hữu hạn (được đảm bảo bởi giả định chờ đợi) và nó sẽ quyết định x (vì nó chỉ có quyền truy cập vào giá trị này và quyết định sẽ đáp ứng yêu cầu hiệu lực đồng thuận). Vì vậy, đối với tình hình của chúng tôi, a , b và c đều là kết quả có thể xảy ra. ◻
Định nghĩa. Đặt trạng thái quan trọng là trạng thái đa trị, với thuộc tính bổ sung mà di chuyển theo sẽ xác định a và di chuyển của B sẽ xác định b .
Có tồn tại một trạng thái quan trọng. Bằng chứng. Từ trên chúng ta biết rằng chúng ta bắt đầu trong một trạng thái đa trị. Để không di chuyển chút nào. Miễn là A hoặc B không buộc cây vào trạng thái không đồng nhất, hãy để nó di chuyển. Wait-freeness đảm bảo rằng cây là hữu hạn, vì vậy tại một số điểm phải gặp phải một trạng thái quan trọng. ◻
Bây giờ hãy xem xét một kịch bản mà chúng ta đang ở trong một trạng thái quan trọng. Có ít nhất hai khả năng:
1) thực hiện di chuyển của nó (từ đó xác định a ) và dừng lại. B sau đó thực hiện di chuyển và dừng lại. C tiếp theo chạy cho đến khi nó kết thúc, cuối cùng quyết định a .
2) di chuyển (do đó xác định b ) và dừng lại. Tiếp theo C chạy cho đến khi nó kết thúc, cuối cùng quyết định b . A không thực hiện một động thái.
Vì các lần đọc và ghi nguyên tử có sự đồng thuận số 1, nên các bước di chuyển của và B phải là các hướng dẫn kiểm tra và thiết lập trên cùng một thanh ghi (nếu các thanh ghi khác nhau, thì C sẽ không thể biết thứ tự A và A Động thái của B đã xảy ra). Từ quan điểm của C , sau đó, các kịch bản 1 và 2 không thể phân biệt được, vì vậy chúng ta phải có C quyết định cả a và b . Điều này là không thể. ◻
Rằng hướng dẫn kiểm tra và thiết lập có số 2 đồng thuận theo cả hai Khiếu nại 1 và 2.
Bài viết trên wikipedia có một tài liệu tham khảo trả lời câu hỏi của bạn, nhưng có lẽ bạn không muốn đọc bài báo 26 trang đó. Tôi sẽ đưa ra một phiên bản đơn giản của bằng chứng (khá kỹ thuật), cho thấy rằng thử nghiệm và thiết lập không thể giải quyết sự đồng thuận nhị phân cho 3 quy trình. Loại lập luận này được sử dụng rộng rãi trong việc chứng minh số lượng đồng thuận.
Giả sử chúng ta có một thuật toán đồng thuận bằng cách sử dụng các thanh ghi TAS cho 3 quy trình.
Tại bất kỳ thời điểm nào, mỗi quá trình sẽ có một động thái (hướng dẫn) sẵn sàng để được thực hiện. Điều nào trong ba hướng dẫn sẽ được thực hiện là không xác định.
Giả sử rằng chúng ta đang ở trạng thái hai phần tử (trạng thái trong đó cả hai quyết định 0 hoặc 1 vẫn có thể) và bất kỳ quá trình nào di chuyển tiếp theo, trạng thái tiếp theo sẽ là thống nhất. Một trạng thái như vậy cuối cùng phải đạt được vì điều kiện chờ đợi miễn phí.
Giả sử (wlg) rằng nếu quá trình 1 di chuyển, trạng thái sẽ là 0 hóa trị và nếu quá trình 2 di chuyển, trạng thái sẽ là 1 hóa trị. Cả hai di chuyển phải là một hoạt động TAS (hoặc ít nhất là: một số loại ghi) trên cùng một thanh ghi, vì nếu chúng là các hoạt động TAS trên các thanh ghi riêng biệt, chúng ta không thể biết liệu quy trình 1 di chuyển trước hay quy trình 2 di chuyển trước.
Hãy xem xét hai vụ hành quyết có thể xảy ra:
Từ quan điểm của quy trình 3, các trạng thái này không thể phân biệt được vì nó chỉ nhìn thấy giá trị được viết bởi quy trình 2. Tuy nhiên, trong trường hợp đầu tiên, nó sẽ cho 0 là đầu ra và trong 1 thứ hai là đầu ra. Rõ ràng, đây là một mâu thuẫn.
Các quy trình 1 và 2 có thể tự quyết định di chuyển trước (vì họ có thể thấy giá trị nào trong thanh ghi trước khi ghi) nhưng quy trình khán giả thứ ba không thể.
Một cách khác để chứng minh rằng thử nghiệm và thiết lập không thể được sử dụng để giải quyết sự đồng thuận của 3 bộ xử lý là chỉ ra rằng thử nghiệm và thiết lập có thể được thực hiện bằng cách sử dụng đồng thuận 2 bộ xử lý. Sau đó, giả sử rằng thử nghiệm và thiết lập có thể giải quyết sự đồng thuận 3 bộ xử lý dẫn đến mâu thuẫn: Giả sử rằng thử nghiệm và thiết lập có thể giải quyết đồng thuận 3 bộ xử lý; sau đó bằng cách thay thế kiểm tra và thiết lập bằng cách thực hiện bằng cách sử dụng đồng thuận 2 bộ xử lý, người ta có được việc thực hiện đồng thuận 3 bộ xử lý bằng đồng thuận 2 bộ xử lý, điều này là không thể. Do đó, test-and-set không thể giải quyết được sự đồng thuận của 3 bộ xử lý.
Để triển khai thử nghiệm và thiết lập cho bộ xử lý n bằng cách sử dụng đồng thuận 2 bộ xử lý, hãy để bộ xử lý xác định người chiến thắng thử nghiệm và thiết lập bằng cách sử dụng một giải đấu trong đó mỗi trận đấu được thực hiện bằng cách sử dụng đồng thuận 2 bộ xử lý (trong trận đấu, bộ xử lý đề xuất định danh của họ và kết quả đồng thuận cho họ biết ai là người chiến thắng).
Trong ý nghĩa thực tế, một định nghĩa đồng thuận ít nghiêm ngặt hơn có thể là đủ (ở đây tôi gọi nó là sự đồng thuận nhẹ):
Định nghĩa . Sự đồng thuận ánh sáng đạt được giữa n luồng iff (a) mỗi luồng quyết định trên cùng một giá trị hoặc không xác định được giá trị của nó, (b) ít nhất một luồng biết giá trị và (c) giá trị này thực sự được đề xuất bởi một trong các chủ đề.
Do đó, sự đồng thuận này theo nghĩa nhẹ hơn cho phép một số chủ đề không biết sự đồng thuận, giá trị được quyết định.
Hệ quả : Trong ý nghĩa thử nghiệm và thiết lập nhẹ hơn này có số lượng đồng thuận ánh sáng vô hạn.
Yêu cầu : Ý nghĩa nhẹ hơn này là thực tế. Ví dụ, để chọn chủ đề để vào phần quan trọng, không cần thiết phải tạo sự đồng thuận theo nghĩa chặt chẽ. Điều đó có nghĩa là: mỗi luồng phải biết liệu nó đã được chọn hay chưa, tuy nhiên nếu nó không được chọn thì nó sẽ không phải chọn cái nào được chọn. Nói cách khác, để loại trừ lẫn nhau - không cần sự đồng thuận, ánh sáng là đủ.