Sử dụng việc kiểm tra luân phiê n:

Một phần của tài liệu BÀI GIẢNG NGUYÊN LÝ CÁC HỆ ĐIỀU HÀNH (Trang 54 - 55)

Tiếp cận : Đây là một giải pháp đề nghị cho hai tiến trình. Hai tiến trình này sử dụng chung biến turn (phản ánh phiên tiến trình nào được vào miền găng), được khởi động với giá trị 0. Nếu turn = 0, tiến trình A được vào miền găng. Nếu turn = 1, tiến trình A đi vào một vòng lặp chờ đến khi turn nhận giá trị 0. Khi tiến trình A rời khỏi miền găng, nó đặt giá trị turn về 1 để cho phép tiến trình B đi vào miền găng.

while (TRUE) {

while (turn != 0); // wait

critical-section ();

turn = 1;

Noncritical-section (); }

(a) Cấu trúc tiến trình A while (TRUE) {

while (turn != 1); // wait

critical-section ();

turn = 0;

Noncritical-section (); }

Hình 3.6 Cấu trúc các tiến trình trong giải pháp kiểm tra luân phiên

Giải pháp này dựa trên việc thực hiện sự kiểm tra nghiêm ngặt đến lượt tiến trình nào được vào miền găng. Do đó nó có thể ngăn chặn được tình trạng hai tiến trình cùng vào miền găng, nhưng lại có thể vi phạm điều kiện thứ ba: một tiến trình có thể bị ngăn chặn vào miền găng bởi một tiến trình khác không ở trong miền găng. Giả sử tiến trình B ra khỏi miền găng rất nhanh chóng. Cả hai tiến trình đều ở ngoài miền găng, và turn = 0. Tiến trình A vào miền găng và ra khỏi nhanh chóng, đặt lại giá trị của turn là1, rồi lại xử lý đoạn lệnh ngoài miền găng lần nữa. Sau đó, tiến trình A lại kết thúc nhanh chóng đoạn lệnh ngoài miền găng của nó và muốn vào miền găng một lần nữa. Tuy nhiên lúc này B vẫn còn mãi xử lý đoạn lệnh ngoài miền găng của mình, và turn lại mang giá trị 1 ! Như vậy, giải pháp này không có giá trị khi có sự khác biệt lớn về tốc độ thực hiện của hai tiến trình, nó vi phạm cả điều kiện thứ hai.

Một phần của tài liệu BÀI GIẢNG NGUYÊN LÝ CÁC HỆ ĐIỀU HÀNH (Trang 54 - 55)

Tải bản đầy đủ (PDF)

(142 trang)