Professional Documents
Culture Documents
BTL Dũng Nam Long
BTL Dũng Nam Long
1
NỘI DUNG BÁO CÁO
------------
3
p0 p1
1 2
2 1
1
p3 1 2 p2
6
- Khởi tạo:
• Với p0, color là green và tất cả các outbuf chứa M
• Với các bộ xử lý khác, color là red và các outbuf rỗng
- Hàm chuyển
• Nếu M nằm trong inbuf và color là red thì đổi color thành green và gửi M vào tất
cả các outbuf
- Bước lặp:
• Trong các bộ xử lý kề với P0 ta chọn một Pi nào đó rồi thực hiện hai sự kiện:
+ Sự kiện giao tại Pi từ P0
+ Sự kiện tính bởi Pi
• Sau đó tiếp tục xét một trong các bộ xử lý kề với P i mà chưa xét (đang ở trạng thái
màu đỏ), giả sử một Pk nào đó rồi tiếp tục thực hiện hai sự kiện nói trên đối với Pk
- Sự kiện :
• Có hai loại sự kiện
– Sự kiện giao : chuyển một thông báo từ outbuf của bên gửi đến inbuf của bên nhận
• Thông báo sẽ được xử lý ngay khi bên nhận thực hiện sự kiện tính toán tiếp theo
– Sự kiện tính : một bước thực hiện của bộ xử lý
• Tương ứng với việc áp dụng hàm chuyển lên trạng thái khả truy nhập hiện thời
Trạng thái khả
truy nhập mới
Trạng thái khả truy
nhập cũ +
Sự kiện tính
- Xử lý các thông báo gửi đến Các thông báo gửi
- Chuyển trạng thái bộ xử lý đi
- Kết thúc:
7
• Giải thuật kết thúc khi biến color của tất cả các bộ xử lý trong mạng đều có giá tri
bằng green
p2 p1
• Bài toán: P0 muốn gửi thông báo M cho tất cả các bộ xử lý khác ở trên mạng
Giải quyết bài toán:
8
• Áp dụng giải thuật phát tràn không đồng bộ để chuyển thông báo M từ P 0 tới tất cả các bộ xử lý
khác ở trên mạng được minh hoạ như sau:
• Khởi tạo:
- P0 chứa thông báo M
- outbuf0(p0p1)=M, outbuf0(p0p2)=M
- color(p0)=green, color(p1)=color(p2)=red, outbufi()={ }
green
M p0 M
p2 p1
- Thưc hiện sự kiện tính bởi P1,, tức là áp dụng hàm chuyển lên P1 và xử lý thông báo gửi đến.
- Sau khi thực hiện sự kiện tính colo(p1) =green và P1 gửi M vào tất cả các outbuf của nó
• Minh hoạ bước lặp 1:
green
green green
p0
p0 M p0 M
M
M
M Sự
Sự kiện giao kiện p2 p1
p2 p1 tại p1 từ p0 p2 p1 tính
red M
red red red red bởi p1 green
9
• Liệt kê các nút kề với P1 rồi chọn một nút bất kỳ đang ở trạng thái màu đỏ để xét tiếp. Ở đây ta
chọn P2 là nút kề tiếp theo để xét. Tức là ta tiến hành thực hiện liên tiếp hai sự kiện giao và tính
cho nút P2
• Tại bước lặp này mọi nút trên mạng đều được chuyển sang màu xanh và thuật toán kết thúc
green
green green M p0
Sự kiện
p0 p0 tính bởi p2
M M M M
M
M p2 p1
Sự kiện giao
p2 p1 tại p2 từ p1 p2 p1 M
green
red M green red M green green
M p0 M M p0
M
Sự kiện giao
p2 p1 tại p1 từ p0 p2 p1
M M
Sự kiện tính Sự kiện giao
bởi p1 p2 p1 tại p2 từ p1 p2 p1
#include<iostream.h>
#include<iomanip.h>
int a[50][50],b[50],n,v;
10
int tim(int i, int m) //xet dinh i da chuyen thanh mau green chua?
{int j;
j=0;
while(( j<=m)&& b[j]!=i) j++;
if (j>m) return 0; // chua chuyen thanh mau green
else return 1; //da chuyen mau green
}
int main()
{int i,j;
cout<<"\n nhap so dinh cua do thi:";
cin>>n;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=0;
i=0;
while(i<n)
{ do
{cout<<"\n nhap dinh ke voi dinh "<<i<<" ("<<n<<": het dinh ke) : ";
cin>>j;
if (j!=i && j>=0 && j<n)
{a[i][j]=1;
}
}while(j!=n);
i++;
}
cout<<"\n hien do thi vua nhap:\n";
for(i=0;i<n;i++ )
{
cout<<" dinh "<< i<<" co dinh ke la: ";
for(j=0;j<n;j++)
if (a[i][j]==1) cout<<j<<" ";
cout<<"\n";
}
do{
cout<<"\n phat tran bat dau tu dinh ("<< n<<":thoat) : ";
cin>>v;
if (v>=0 && v<n)
{
a[v][v]=2; //chuyen dinh v thanh mau green
// b la tap cac dinh da chuyen thanh mau green, thu tu cac dinh la thu tu da duyet
b[0]=v;
j=0;
11
while(j<n)
{i=0;
int k;
k=b[j];// dinh k da o mau green tim dinh ke voi dinh k la dinh i chua chuyen thanh mau green
cout<<"\n";
if (i==n)
{
// neu cac dinh ke voi dinh k da chuyen mau green , ta xet cac dinh con chua chuyen thanh green
cua dinh cha cua k trong do thi
int g;
g=j-1;
while((i==n)&&(g>=0))
{i=0;
int h;
h=b[g];
while(!((a[h][i]==1)&& !tim(i,j)) && i<n )
i++;
g--;
}
// neu cac dinh con da chuyen thanh green, ta xet cac dinh con lai
if (i==n)
{i=0;
while((i<n)&& (a[i][i]!=0)) i++;
}
}
j++;
b[j]=i;
a[i][i]=2; // chuyen dinh i thanh mau green
}
13