ghi Q_entryM: int; ứng dụng thưtừ khóa: int; thông báo duy nhất định danh sender_id: int; người gửi của thư dấu thời gian: int; dấu thời gian dự kiến được gán cho thư deliverable: boolean; cho dù thư đã sẵn sàng cho việc phân phối(địa phương biến)hàng đợi Q_entry: temp_Q, delivery_QINT: đồng hồ / / sử dụng như là một biến thể của Lamport của vô hướng đồng hồINT: ưu tiên / / sử dụng để theo dõi dấu thời gian đề nghị cao nhất (loại thư)REVISE_TS (M, tôi, từ khóa, ts)Giai đoạn 1 thư được gửi bởi Pi, với dấu thời gian ban đầu tsPROPOSED_TS (j, tôi, từ khóa, ts)Giai đoạn 2 thư được gửi bởi Pj, với sửa đổi dấu thời gian nhất, phải PiFINAL_TS (tôi, từ khóa, ts) / / giai đoạn 3 thư gửi bởi Pi, với dấu thời gian cuối cùng(1) khi quá trình Pi muốn phát đa hướng đến một tin nhắn M với một từ khóa từ khóa: (1a) đồng hồ đồng hồ ← + 1;(1b) gửi REVISE_TS (M, tôi, từ khóa, giờ) để tất cả quá trình; (1c) temp_ts ← 0;(1d) đang chờ đợi PROPOSED_TS (j, tôi, từ khóa, tsj) từ mỗi quá trình Pj; (1e) ∀j ∈ N, làm temp_ts ← max (temp_ts, tsj);(1f) gửi FINAL_TS (tôi, từ khóa, temp_ts) đến tất cả các quy trình; (1g) đồng hồ ← tối đa (đồng hồ, temp_ts).(2) khi REVISE_TS (M, j, từ khóa, clk) đến từ Pj: (2a) ưu tiên ← tối đa (ưu tiên + 1, clk);chèn (2b) (M, từ khóa, j, ưu tiên, không thể gửi) trong temp_Q;cuối hàng đợi(2c) gửi PROPOSED_TS (i, j, từ khóa, ưu tiên) để Pj.(3) khi FINAL_TS (j, x, clk) đến từ Pj:(3a) xác định nhập cảnh Q_e ở temp_Q, nơi Q_e.tag = x;(3b) mark Q_e.deliverable là đúng;(3c) Cập Nhật Q_e.timestamp để temp_Q clk và tái sắp xếp dựa trên cácthời gian hiển thị trường;Nếu (3d) (head(temp_Q)) .tag = Q_e.tag sau đódi chuyển (3e) Q_e từ temp_Q đến delivery_Q; (3f) trong khi (head(temp_Q)) .deliverable là làm đúng(3g) dequeue head(temp_Q) và đưa vào delivery_Q.(4) khi Pi loại bỏ một tin nhắn (M, từ khóa, j, ts, deliverable) từHead(delivery_Qi):(4a) đồng hồ ← tối đa (đồng hồ, ts) + 1.
đang được dịch, vui lòng đợi..
