Tin học
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Xét một giải pháp semaphore đúng cho bài toán Dining philosophers

Go down

Xét một giải pháp semaphore đúng cho bài toán Dining philosophers Empty Xét một giải pháp semaphore đúng cho bài toán Dining philosophers

Bài gửi  v_hoangminh[I22B] 13/4/2013, 14:26

Xét một giải pháp semaphore đúng cho bài toán Dining philosophers :
#define N 5
#define LEFT(i-1)%N
#define RIGHT(i+1)%N
#define THINKING 0
#define HUNGRY 1
#define EATING 2
int state[N];
semaphore mutex = 1;
semaphore s[N];//gan tri ban dau =0
//tiến trình mô phỏng triết gia thứ i
void philosopher( int i) // i là triết gia thứ i : 0..N-1
{
while (TRUE)
{
think(); // Suy nghĩ
take_forks(i); // yêu cầu đến khi có đủ 2 nĩa
eat(); // yum-yum, spaghetti
put_forks(i); // đặt cả 2 nĩa lên bàn lại
}
}
//kiểm tra điều kiện được ăn
void test ( int i) // i là triết gia thứ i : 0..N-1
{
if(state[i]==HUNGRY && state[LEFT]!=EATING && state[RIGHT]!= EATING)
{
state[i] = EATING;
up(s[i]);
}
}
//yêu cầu lấy 2 nĩa
void take_forks ( int i) // i là triết gia thứ i : 0..N-1
{
while (TRUE)
{
down(mutex); // vào miền găng
state[i] = HUNGRY; // ghi nhận triết gia i đã đói
test(i); // cố gắng lấy 2 nĩa
up(mutex); // ra khỏi miền găng
down(s[i]); // chờ nếu không có đủ 2 nĩa
}
}
//đặt 2 nĩa xuóng
void put_forks ( int i) // i là triết gia thứ i : 0..N-1
{
while (TRUE)
{
down(mutex); // vào miền găng
state[i] = THINKING; // ghi nhận triết gia i ăn xong
test(LEFT); // kiểm tra ngườii bên trái đã có thể ăn?
test(RIGHT); // kiểm tra ngmái bên phải đã có thể ăn?
up(mutex); // ra khỏi miền găng
}
}

v_hoangminh[I22B]

Tổng số bài gửi : 24
Join date : 17/03/2013
Age : 34

Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết