Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

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: Truyen247.Pro

Tags: