CÁC GIẢI PHÁP VỀ ĐỒNG BỘ HÓACÁC GIẢI PHÁP VỀ ĐỒNG BỘ HÓA
2.5.2 Các giải pháp SLEEP and WAKEUP
Đối với giải pháp này thì tiến trình nào chưa đủ điều kiện vào miền găng thì sẽ chuyển sang trạng thái blocked. Dùng 2 thủ tục Sleep and wakeup để thay đổi trạng thái
Khi tiến trình không đủ điều kiện vào đoạn găng thì hệ thống gọi thủ tục Sleep để chuyển sang trạng thái blocked và đưa vào hàng đợi cho đến khi một tiến trình khác gọi thủ tục wakeup để giải phóng nó ra khỏi hàng đợi và đưa vào đoạn găng
Một tiến trình ra khỏi hàng đợi phải gọi thủ tục wakeup để đánh thức một tiến trình trong hàng đợi blocked ra để tạo điều kiện cho nó vào đoạn găng
CÁC GIẢI PHÁP VỀ ĐỒNG BỘ HÓACÁC GIẢI PHÁP VỀ ĐỒNG BỘ HÓA CÁC GIẢI PHÁP VỀ ĐỒNG BỘ HÓA
2.5.2 Các giải pháp SLEEP and WAKEUP
int busy; // 1 nếu miền găng đang bị chiếm, 0 là nếu không chiếm đóng int blocked; // đếm số lượng tiến trình đang bị khoá
while (TRUE) { if (busy) { blocked = blocked + 1; sleep(); } else busy = 1; critical_section (); busy = 0; if(blocked) { wakeup(process); blocked = blocked - 1; } Noncritical_section ();
CÁC GIẢI PHÁP VỀ ĐỒNG BỘ HÓACÁC GIẢI PHÁP VỀ ĐỒNG BỘ HÓA CÁC GIẢI PHÁP VỀ ĐỒNG BỘ HÓA
2.5.2 Các giải pháp SLEEP and WAKEUP
Giải pháp này do Dijkstra đưa ra 1965, S là Semaphore được định nghĩa như sau:
2.5.2.1 Giải pháp dùng Semaphore
• Là một biến nguyên dương e(s)
• Ứng với S là hàng đợi F(s) lưu các tiến trình bị khóa
• Có 2 thao tác:
+ Down giảm giá trị semaphore 1 đơn vị + Up tăng giá trị Semaphore 1 đơn vị
CÁC GIẢI PHÁP VỀ ĐỒNG BỘ HÓACÁC GIẢI PHÁP VỀ ĐỒNG BỘ HÓA CÁC GIẢI PHÁP VỀ ĐỒNG BỘ HÓA