lanxinh chuong4 tiến trình tương tranh
4.1
Trạng thái loại trừ là trạng thái khi 1 P truy nhập đến dữ liệu chung thì cấm tất cả các P khác truy nhập đến cung dữ liệu vào thời điểm đó
VD xét 2 P điều khiển ứng vs 2 người dùng đồng thời muốn truy nhập đến biến toàn cục totaline, để tăng biến đó giả sử mỗi P ứng dụng đều dùng các lệnh sau
1-load totaline
2-totaline:=totaline+1
3-store totaline
Khi một P đang truy nhập đến biến totaline thì các P khác pải đợi đếm khi P đầu tiên kết thúc truy nhập
4.2 sự khác nhau giữa phiên bản 1 và phiên bản 2 của thuật toán decker
* phiên bản 1:
- Trong VS1 việc thực hiện mutual exclusion chỉ bằng 1 biến do đó có vấn đề các P vào khoảng tới hạn theo thứ tự cố định
- cả 2 P cùng thực hiện. vì đầu tiên biến Pno gán = 1 do đó chỉ có P1 đc đư vào critical region. P2 khi muốn vào critical region thấy biến Pno có giá trị 1 do đó pải chờ = vòng lặp rỗng. nó chờ đến khi pno=2 tức là khi p1 ra khỏi critical region và đặt Pno=2 . vậy ctr đã đảm bảo loại trừ lẫn nhau
* phiên bản 2
- trong V2 sử dụng 2 biến logic f1 và f2 chúng nhận giá trị true khi P tương úng nằm trong critical region
- cả 2 P cùng thực hiện , đồng thời thử vào critical region .các biến f1 và f2 có giá trị fale. P1 kiểm tra thấy f2 thấy f2= false và thoát khỏi vòng lặp chờ , trc khi nó kip đặt f1= true thì đến lượt p2 đc chiếm BXL , P 2 cũng có thế kiểm tra thấy f1 là false(vì lúc đó P1 chưa kịp đặt) lúc đó P2 đặt f2= true và cũng vào critical region như thế cả 2 P cùng vào chế độ critical region , do đó V2 k đảm bảo loại trừ lẫn nhau
4.3Mô tả thuật toán decker
- sử dụng 3 biến
f1- tiến trình 1
f2- tiến trình 2
s- quyền ưu tiên quyết định tiến trình đi tiếp
P1
Begin
F1:=true;
While f2= true do
If s=2 then
Begin
F1= false;
While s=2 do
F1:= true;
End;
F1=fasle;
S=2;
End;
P2
Begin
F2:=true;
While f1=true do
If s=1 then
Begin
F2:=fasle;
While s=1 do
F2:=true;
End;
F2:=false;
S=1;
End;
Begin
F1:=false;
F2:=false;
S:=1
Parbegin
P1;
P2;
Parend;
End;
4.4 thực hiện loại trừ bằng semaphore
- Lệnh P:
If s > 0 then s:=s-1{semaphore chỉ nhận giá trị tự nhiên}
Else waiting for s
- lệnh V
if (exit P waiting for s) then allow one of them(waiting P) continue
else s = s+1
• program semaphore
var active : semaphore
P1;
Begin
While true do begin
P(active);
Critical region;
V(active);
End;
P2
Begin
While true do begin
P(active);
Critical region;
V(active);
End;
Begin
Initlize semaphore(active,1);
Parbegin
P1;
P2;
Parend
End.
Bạn đang đọc truyện trên: AzTruyen.Top