Giải pháp sai dẫn đến Deadlock
Trang 1 trong tổng số 1 trang
Giải pháp sai dẫn đến Deadlock
#include “prototype.h”
#define N 5 /* Số hiền triết */
void philosopher ( int i ) { /* i = 0, 1, ... , N-1 */
while ( 1 ) {
think ( ); /* Đang nghĩ */
take_chopstick ( i ); /* Lấy đũa bên trái */
take_chopstick ( (i+1) % N ); /* Lấy đũa bên phải */
eat ( ); /* Ăn */
put_chopstick ( i ); /* Đặt đũa bên trái */
put_chopstick ( (i+1) % N ); /* Đặt đũa bên phải */
}
}
Deadlock xảy ra khi cả 5 nhà hiền triết cùng 1 lúc tìm cách lấy đũa bên Trái, sau đó không ai lấy được đũa bên Phải cả và cứ thế chờ nhau.
Có thể sửa chương trình để mỗi hiền triết nhấc đũa bên trái trước, nếu được thì kiểm tra đũa bên phải, nếu không có thì đặt đũa bên trái xuống, chờ 1 lúc rồi tiếp tục lại như trên. Nếu cả 5 người cùng làm như vậy một lúc sẽ dẫn đến tình trạng Starvation.
#define N 5 /* Số hiền triết */
void philosopher ( int i ) { /* i = 0, 1, ... , N-1 */
while ( 1 ) {
think ( ); /* Đang nghĩ */
take_chopstick ( i ); /* Lấy đũa bên trái */
take_chopstick ( (i+1) % N ); /* Lấy đũa bên phải */
eat ( ); /* Ăn */
put_chopstick ( i ); /* Đặt đũa bên trái */
put_chopstick ( (i+1) % N ); /* Đặt đũa bên phải */
}
}
Deadlock xảy ra khi cả 5 nhà hiền triết cùng 1 lúc tìm cách lấy đũa bên Trái, sau đó không ai lấy được đũa bên Phải cả và cứ thế chờ nhau.
Có thể sửa chương trình để mỗi hiền triết nhấc đũa bên trái trước, nếu được thì kiểm tra đũa bên phải, nếu không có thì đặt đũa bên trái xuống, chờ 1 lúc rồi tiếp tục lại như trên. Nếu cả 5 người cùng làm như vậy một lúc sẽ dẫn đến tình trạng Starvation.
Similar topics
» GIẢI PHÁP ẢO HÓA CHO MÁY CHỦ
» CÁC GIẢI PHÁP XỬ LÝ DEADLOCK
» Thảo luận Bài 8
» Thảo luận Bài 8
» Các giải pháp xử lý Deadlock
» CÁC GIẢI PHÁP XỬ LÝ DEADLOCK
» Thảo luận Bài 8
» Thảo luận Bài 8
» Các giải pháp xử lý Deadlock
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết