CÁC GIẢI PHÁP VỀ ĐỒNG BỘ HÓACÁC GIẢI PHÁP VỀ ĐỒNG BỘ HÓA
2.5.1 Các giải pháp BYSY WAITING 1 Giải pháp phần mềm
2.5.1.1 Giải pháp phần mềm
Sử dụng biến khóa
- Dùng biến lock chung cho các tiến trình
- Nếu lock= =1 thì khóa, không cho tiến trình vào miền găng. Chờ cho đến khi lock= =0
- Nếu lock= =0 thì cho tiến trình vào miền găng, đặt lock= =1 để khóa không cho các tiến trình khác vào miề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.1 Các giải pháp BYSY WAITING2.5.1.1 Giải pháp phần mềm 2.5.1.1 Giải pháp phần mềm
- Giải thuật sử dụng biến khoá để đồng bộ
while (TRUE) {
while (lock == 1); // wait lock = 1; critical_section (); lock = 0; Noncritical_section (); } Sử dụng biến khóa
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.1 Các giải pháp BYSY WAITING2.5.1.1 Giải pháp phần mềm 2.5.1.1 Giải pháp phần mềm
Sử dụng việc kiểm tra luân phiên
- Các tiến trình muốn đi vào miền găng thì được gắn nhãn 0|1 - Sử dụng biến turn để chỉ thứ tự luân phiên.
- Nếu turn= =0: tiến trình có nhãn 0 được vào miền găng - Nếu turn= =1: tiến trình có nhãn 1 được vào miề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.1 Các giải pháp BYSY WAITING2.5.1.1 Giải pháp phần mềm 2.5.1.1 Giải pháp phần mềm
- Giải thuật sử dụng việc kiểm tra luân phiên có nhãn 0
while (TRUE) {
while (turn != 0); // wait
critical_section ();
turn = 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.1 Các giải pháp BYSY WAITING2.5.1.1 Giải pháp phần mềm 2.5.1.1 Giải pháp phần mềm
- Giải thuật sử dụng việc kiểm tra luân phiên có nhãn 1
while (TRUE) {
while (turn != 1); // wait
critical_section ();
turn = 0;
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.1 Các giải pháp BYSY WAITING2.5.1.1 Giải pháp phần mềm 2.5.1.1 Giải pháp phần mềm
Giải pháp Peterson: kết hợp cả 2 giải pháp trên,dùng 2 biến chung int turn; // đến phiên ai
int interesse[2]; // khởi động là FALSE
Nếu interesse[i]=TRUE Pi muốn vào miền găng
Khởi đầu interesse[0]=interesse[1]=false interesse khởi động là 0|1 Vào miền găng thì interesse[i]=true và sau đó đặt turn =j
Nếu interesse[j]=false không quan tâm vào miền găng thì Pi vào miền găng, sau đó ra khỏi miền găng thì đặt lại là interesse[i]=false
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.1 Các giải pháp BYSY WAITING2.5.1.1 Giải pháp phần mềm 2.5.1.1 Giải pháp phần mềm
Giải pháp Peterson: kết hợp cả 2 giải pháp trên,dùng2 biến chung while (TRUE) {
int j = 1-i; // j là tiến trình còn lại interesse[i]= TRUE;
turn = j;
while (turn = = j && interesse[j]= =TRUE); critical_section ();
interesse[i] = FALSE; 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.1.2 Giải pháp phần cứng