màu:
Thuật toán này cũng như thuật toán trước , vẫn áp dụng ổn định đã trình bày. Trong thuật này không có Master mà các process tự phân công công việc theo thuật toán ở trên.
Thuật toán cho process p:
Dữ liệu:
- p_tid : tid của process,
- p_index : chỉ số công việc process p đảm nhận, - p_L : số lượng công việc p đang đảm nhận, - q_index : chỉ số công việc process q đảm nhận, - q_L : số lượng công việc q đang đảm nhận,
- danhan_k[N] : nếu danhan_k[i]=1 thì p đã nhận các thông tin về công việc thứ i, - p_karr[N]: nếu danhan_k[i]=1 thì p đang đảm nhận công việc i,
- x[N] : giá trị đỉnh, xác định hướng cạnh ( kết hợp với chỉ số đỉnh), - c[N] : màu tô đỉnh.
begin
p_L=1;
repeat
If có một process q vừ khởi tạo then begin
Nhận q_tid,q_index của q; Kết nối với p;
Nếu process p đang đảm nhận q_index thì p_L = p_L-1; end
(v_index, v_L) = (p_index, p_L) ; For all process q
begin
If p đang đảm nhận q_index (kể cả process p_index) hoặc process q ngưng
hoạt động then
danhan_k[q_index]=1; If p đang đảm nhận q_index then
p_karr[q_index]=1; end
Gởi <p_index, p_L, p_karr> cho các process q;
while(nhận chưa đủ <p_index, p_L, p_karr> từ các q còn hoạt động) /* k : danhan_k[k]=0 */
begin
If có process q ngưng hoạt động then
begin
Nhận q_index của q;
danhan_k[q_index]=1; // xem như đã nhận các thông tin từ q end
If có thông điệp từ process q then
begin
Nhận q_tid,q_index,q_L, q_karr, q_giá trị của q;
If p không đảm nhận q_index then
begin
For k = 0 to N-1
If q_karr[k]=1 then
danhan_k[k]=1; // đã nhận thông điệp k mà q đảm nhận, // k_giá trị
If (q_index , q_L) < (v_index, v_L) then
(q_index , q_L) = (v_index, v_L);
end
end // while
If (q_index , q_L)= (v_index, v_L) then
/* p là process có ít công việc nhất và có chỉ số bé nhất */ begin
Tìm chỉ số k nhỏ nhất chưa có process đảm nhận , gán k cho p; p_L++; // số công việc tăng lên 1
end
If mọi đỉnh k được đảm nhận bởi một process then Tính x ,c ;
until thỏa điều kiện kết thúc;
end. /*kết thúc process*/
CHUƠNG 5 : KẾT QUẢ THỰC NGHIỆM 5.1 Kết quả thực nghiệm của thuật toán Bracha – Toueg :