đối tượng chào mua loại. Quan điểm khác nhau được sắp xếp theo các mối quan hệ ≤, được xác định như
sau:
Xem ≤ Viewr nếu và chỉ nếu với mỗi tiến trình Pi như vậy mà Xem [k] .P = Pi, chúng tôi cũng có một số cho rằng kr, Viewr [kr] .P = Pi và Xem [k] .attempt ≤ Viewr [kr] .attempt.
Nếu Viewr • ≤ Xem (dòng 1N), sau đó Xem được cập nhật bằng cách sử dụng Viewr (dòng 1o) bằng cách:
1. bao gồm tất cả các mục trình từ Viewr đang thiếu trong View (tức là, Viewr [kr] .P không bằng Xem [k] .P, với mọi k), vì vậy mục như vậy Viewr [kr] được thêm vào View.
2. thay thế mục cũ hơn cho quá trình tương tự với những người gần đây hơn, (tức là, nếu Viewr [kr] .P = Pi = Xem [k] .P và Viewr [kr] .attempt> Xem [k] .attempt, thay thế Xem [k ] bởi Viewr [kr]). Bất kỳ thông tin mới học được phát sóng đến tất cả các quá trình (đường 1c, 1v), và một quá trình sử dụng một số lượng truy cập để theo dõi số lượng các quá trình khác đã phát sóng cùng nhìn chính xác như quan điểm mới nhất của quá trình này (dòng 1k). Nếu xem trong một tin nhắn nhận được có chứa thông tin đó không phải là quan điểm hiện tại (dòng 1N), quan điểm hiện tại được cập nhật (dòng 1o). Lưu ý rằng điều này là tương tự như việc tối đa cặp đồng hồ vector. Tuy nhiên, một sự khác biệt quan trọng là sự sắp đặt của thành phần không được xác định trước, vì mỗi quá trình có thể đặt hàng các quá trình khác một cách khác nhau. Khi đếm đạt n - f (dòng 1 lít), tin nhắn không thể đến vì các quá trình f khác có thể đã bị thất bại. Quan điểm như vậy mà n - khẳng định f đã nhận được. Nói là một điểm ổn định Khi một quá trình xác định một điểm là ổn định (đường 1m, 1Q), kiểm tra quá trình nếu có một cuộc xung đột với sự lựa chọn của mình một cái tên mới và sự lựa chọn của các quá trình khác (dòng 1R, 1s). Nếu không có xung đột, nó Chốt sự chọn lựa tên mới (dòng 1T, 1u) và đi vào vòng lặp (đường 1G-1K) trong đó nó giúp quá trình khác để biết được quan điểm ổn định và hoàn thiện tên mới của họ (biến cục bộ) struct thầu: số nguyên P; // Tên cũ của quá trình số nguyên x; // Tên mới được đặt giá thầu theo quá trình nỗ lực integer; // Số hồ sơ dự thầu cho đến nay, bao gồm cả điều này hiện nay giá // Boolean quyết định; // Dù mới tên x được hoàn tất danh sách dự thầu: Xem [1 ... n] ← - ((i, 0, 0, false)); // Khởi tạo danh sách với một entry // cho Pi nguyên đếm; // Số lượng bản sao của các địa phương xem mới nhất, nhận được từ // khác boolean: khởi động lại, ổn định, no_choose; // Các biến điều khiển vòng lặp (1) Một quá trình Pi, 1 ≤ i ≤ n, tham gia vào việc đổi tên: (1a) lặp lại (1b) restart ← - false; (1c) thông báo phát sóng (View); (1d) count ← - 1; (1e) lặp lại (1f) no_choose ← - 0; (1g) lặp lại (1h) đang chờ đợi tin nhắn (Viewr); (1i) ổn định ← - false; (1J) nếu Viewr = Xem sau đó ( 1k) count ← - đếm + 1; (1 lít) nếu đếm ≥ n - f sau đó (1m) ổn định ← - true; (1N) khác nếu Viewr • ≤ Xem sau đó (1o) cập nhật Xem bằng Viewr bằng cách lấy thông tin mới nhất cho mỗi quá trình; (1p) restart ← - true; (1Q) cho đến (ổn định = true hoặc khởi động lại = true); // N - bản sao f // nhận, hoặc xem mới thu được (1r) nếu khởi động lại = false thì // Xem [1] có // thông tin về Pi (1s) nếu Xem [1] .x • = 0 và Xem [ 1] .x • = Xem [j] .x cho bất kỳ j đó (1t) (1u) quyết định xem [1] .X; Xem [1] .decide ← - true; tin nhắn (1V) phát sóng (View); (1w) khác (1x) cho r được thứ hạng của Pi trong chưa quyết định (View); (1n) nếu r ≤ f + 1 sau đó ( 1Z) Xem [1] .x ← - miễn phí (Xem) (r), các rth tên miễn phí tại Xem; (1A) Xem [1] .attempt ← - Xem [1] .attempt + 1; (1B) restart ← - 1; (1C) khác (1D) no_choose ← - 1; (1E) cho đến khi no_choose = 0; (1F) cho đến khi khởi động lại = 0; (1G) lặp lại (1H) về việc nhận tin nhắn (Viewr) (1I) update View với Viewr nếu cần thiết; (1J) tin nhắn quảng bá (View); (1K) cho đến khi sai. Algorithm 14,7 Asynchronous đổi tên trong mô hình thông điệp đi qua [1]. Mã đưa ra là cho quá trình Pi, 1 ≤ i ≤ n. Sự lựa chọn. Nếu có một cuộc xung đột (dòng 1w-1F), một tên mới phải được lựa chọn một lần nữa và cạnh tranh với các quá trình khác. Có hai trường hợp ở đây, tùy thuộc vào cấp bậc của quá trình này trong số tất cả các tiến trình đã chưa hoàn thành tên mới của họ (tức là, trong số tất cả các quá trình ngoại trừ những người mà Xem [j] .decide = 1). Hãy tập hợp các quá trình như vậy được ký hiệu là chưa quyết định (View). Rõ ràng, như là tên mới của các quá trình đó không được hoàn thành, các xếp hạng được xác định dựa trên các tên miền cũ (dòng 1x). • Nếu các bậc r nhỏ hơn f + 2 (dòng 1n), quá trình chọn tên miễn phí rth từ miễn phí (View), những cái tên "miễn phí" từ M chưa được hoàn thiện bởi các quá trình (trong đó có quyết định của họ nent compo- thiết lập để 1 trong View). Quá trình này đã khởi động lại quá trình đấu thầu, bằng cách quay lại bước (1a), phát sóng xem được cập nhật (dòng 1c) của nó, và như vậy. • Nếu cấp bậc r vượt f + 1 (đường 1C, ID), quá trình đi để dòng (1e) và sau đó chờ đợi cho một số quá trình khác để gửi tin được cập nhật của nó. Logic ở đây là ít nhất một quá trình chính xác sẽ có một thứ hạng lên đến f + 1 số quyết định, và sẽ nhận và ổn định tên mới của nó trước khi quá trình với thứ tự lớn hơn f + 1 bắt đầu cạnh tranh cho một tên mới. Một số định nghĩa và tính giờ được đưa ra: • P1 Một thuật toán là địa phương thích hợp nếu cho mỗi lần chạy và mỗi quy trình, trình tự của các Xem danh sách là hoàn toàn theo lệnh của ≤. Algorithm 14.7 được xem là thích hợp tại địa phương, từ đường 1J-1o. P2 • Một quan điểm là ổn định đối với một quá trình với quá trình đã nhận được n - f - 1 tin nhắn chứa thông tin giống hệt nhau trong quan điểm đi kèm. (Cùng với quan điểm giống nhau của riêng mình, có n - khẳng định f.) Một xem là ổn định trong một chạy nếu nó là ổn định đối với một số quá trình với. • P3 Nếu một thuật toán là phù hợp tại địa phương, sau đó trong bất kỳ chạy, các bộ ổn định quan điểm là hoàn toàn ra lệnh. Đây được xem như sau. Hãy xem Xem và Viewr được ổn định đối với quá trình i và j với, tương ứng. Sau đó n - các quá trình f (nói, đặt Ái) thống nhất View, và n - các quá trình f (nói, đặt Aj) thống nhất Viewr. Nếu Xem và Viewr không hoàn toàn ra lệnh, Ai ∩ Aj = ∅. Disjointness ngụ ý kích thước của Aj là tại hầu hết các n - (n - f) = f. Như vậy, n - f ≤ f, ngụ ý, n ≤ 2f. Điều này mâu thuẫn với giả định rằng n ≥ 2f + 1, do đó, ít nhất là một quá trình phải đã gửi cả Xem và Viewr. Vì vậy, Xem và Viewr phải được hoàn toàn ra lệnh. • P4 Như Algorithm 14,7 là thích hợp tại địa phương, đề ra các quan điểm ổn định là hoàn toàn ra lệnh. Tính đúng đắn An toàn Một quá trình Chốt một tên mới một khi nó có một cái nhìn ổn định. Pi và Pj không thể hoàn thành cùng tên bởi vì các quan điểm ổn định được hoàn toàn ra lệnh. Mà không mất tính tổng quát, giả sử rằng quan điểm ổn định của Pi ≤ xem ổn định Pj 's khi họ lần lượt hoàn thành tên của họ. Sau đó xem ổn định Pj 's phải có tên hoàn thiện bởi Pi và Pj sẽ không chọn cùng tên. Liveness / chấm dứt quan sát rằng khi một quá trình chọn một tên mới (dòng 1Z), có ít nhất n - 1 tên dùng những người khác, do đó f + 1 tên có sẵn. Để chứng minh rằng tất cả các quá trình hoàn thiện cuối cùng một tên, hãy miễn phí (Xem) là tập hợp của các tên miễn phí từ M như mỗi lần xem. Hãy quyết định là tập hợp của các quá trình đó hoàn thành tên mới của họ (ví dụ, mà bid.decide là true). Sau đó, N - QUYẾT ĐỊNH là chưa quyết định, các bộ quy trình mà không thể hoàn thành một cái tên mới. Bây giờ chúng ta tranh luận bằng mâu thuẫn đó chưa quyết định là rỗng. • Xem xét việc thực hiện sau thời gian mà tất cả các quá trình trong QUYẾT đã quyết định đặt tên mới của mình, đồng nhất một giá thầu gửi bởi mọi quy trình chính xác khác đã được nhận bởi mỗi quá trình chính xác, ngụ ý rằng | Xem | ≥ n - f. Khi không có các khối đúng quy trình, thời điểm này sẽ xảy ra. Hãy Viewmin là quan điểm ổn định nhỏ nhất sau thời điểm này trong thời gian. By P4, tất cả các quan điểm được hoàn toàn ra lệnh và do đó Viewmin được xác định duy nhất. Hãy tập hợp các tên miễn phí vào thời điểm này được biểu thị như là miễn phí (Viewmin) và thiết lập các quy trình chưa được quyết định tại thời điểm này được ký hiệu là chưa quyết định (Viewmin). • Trong số các quá trình trong chưa quyết định (Viewmin), xem xét quá trình Pmin với nhỏ nhất cấp bậc, dựa vào tên tuổi. Mức xếp hạng tối đa là f + 1, và do đó quá trình sẽ chọn một tên mới (dòng 1n, 1Z, 1A). Như rank là duy nhất, không có quá trình khác trong chưa quyết định (Viewmin) sẽ ngay bây giờ hoặc từ đó chọn tên này được chọn bởi Pmin. • Cập nhật Pmin và chương trình phát sóng nhìn của nó. Khi quá trình khác nhận được điều này xem, họ cập nhật quan điểm địa phương của họ với thông tin mới này, và cũng sẽ phát sóng quan điểm của họ được cập nhật: • hoặc trong các vòng lặp (đường 1G-1K); hoặc • thông qua thực hiện đường (1C-1D), sau đó dòng (1N-1o), và sau đó (1b-1c). Pmin và tất cả các quá trình chính xác khác nhận được ít nhất n - xác nhận f, làm cho các điểm chứa sự lựa chọn của một Pmin của tên mới một điểm ổn định. Do đó, Pmin có thể quyết định một cái tên mới, dẫn đến một mâu thuẫn mà chưa quyết định (Viewmin) là trống rỗng. Complexity Mỗi lần một quá trình hồ sơ dự thầu với một tên mới cho bản thân, một chương trình phát sóng được gửi (n - 1 tin nhắn), và mỗi người nhận khi phát sóng , nhìn thấy một cái nhìn mới, cũng làm một phát sóng (n - 1 tin nhắn). Điều này dẫn đến O (n2) tin nhắn mỗi tên mới thầu. Hãy xem ổn định cuối cùng được ký hiệu bằng Viewfinal. Tổng số tin nhắn là Gn = Xem thức .attempti × n2. Tập thể dục 14,9 hỏi bạn phân tích các ràng buộc về số lượng các nỗ lực được thực hiện theo các quy trình. 14.5.7 phát sóng đáng tin cậy Mặc dù phát sóng terminating đáng tin cậy (RTB) là không thể giải quyết được thất bại dưới (nhớ lại rằng chúng tôi cho thấy nếu giảm từ sự đồng thuận cho rằng vấn đề trong Section14. 5.2), một phiên bản yếu hơn của RTB, cụ thể là phát sóng đáng tin cậy, trong đó các điều kiện chấm dứt được giảm xuống, là giải được dưới những thất bại tai nạn. Các giao thức được thể hiện trong thuật toán 14.8. Giao thức này sử dụng lên đến O (n2) thông điệp để phát sóng thông điệp M và hoạt động trong khuôn mặt của bất kỳ số thất bại. Sự khác biệt chính giữa RTB và phát sóng đáng tin cậy là RTB yêu cầu giao hàng cuối cùng của một số tin nhắn - thậm chí nếu người gửi không chỉ khi sắp phát sóng. Trong trường hợp này, một thông điệp thực phải được gửi đi, trong khi nhắn null này không cần phải được gửi dưới phát sóng đáng tin cậy. Như vậy, RTB đòi hỏi sự công nhận của sự thất bại (như mô tả ở trên) như trái ngược với
đang được dịch, vui lòng đợi..