Semaphore Detail

You might also like

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 9

Semaphore s = 1

P1 P2
Down (s) Down (s)
CS; CS;
Up(s) Up(s)

Down (S) Up(S)


{ {
S.value --; S.value ++;
if S.value < 0 if S.value ≤ 0
{ {
Add(P,S.L); Remove(P,S.L);
Sleep(); Wakeup(P);
} }
} }
Semaphore s = 0

P1 : P2:
Job1; Down (s);
Up(s) Job2;

Down (S) Up(S)


{ {
S.value --; S.value ++;
if S.value < 0 if S.value ≤ 0
{ {
Add(P,S.L); Remove(P,S.L);
Sleep(); Wakeup(P);
} }
} }
• P1 {Job 1}
• P2 {Job 2}
• P3 {Job 3}
• Yeu cau: Job1  Job2  Job3
Semaphore s1=0, s2=0

P2: P3 :
P1 :
Down (s1);
Job1; Down(s2)
Job2; Job3;
Up(s1)
Up (s2);
Bài toán độc quyền truy xuất
• Xác định có phải là bài toán độc quyền
truy xuất hay không ?
• Xác định miền găng (CS) (dấu hiệu: các
đoạn CT có sử dụng chung các biến).
• Khai báo semaphore và khởi tạo
semaphore (thông thường là 1).
• Đặt miền găng giữa cặp Down và Up của
Semaphore tương ứng.
Bài toán phối hợp xử lý
• Có phải là bài toán phối hợp xử lý hay
không ?
• Xác định thứ tự xử lý
• Khai báo semaphore và khởi gán giá trị
của Semaphore (thông thường là bằng 0)
• Đặt Up & down ở vị trí thích hợp:
– Làm sau thì down nằm trước
– Làm trước thì Up nằm sau
Trong giai đoạn thử nghiệm, hầm đường bộ qua đèo Hải Vân chỉ cho phép các
phương tiện lưu thông qua hầm với số lượng hạn chế và với những điều kiện
nghiêm ngặt. Khi một phương tiện đến đầu hầm sẽ gọi hàm EnterTunnel(direction)
để kiểm tra điều kiện vào hầm. Khi đã qua hầm sẽ gọi hàm ExitTunnel(direction)
để báo hiệu kết thúc và rời hầm.
Giả sử hoạt động của mỗi một phương tiện được mô tả bằng tiến trình Car() sau
đây:
Car(direction) //Direction xác định hướng di chuyển của phương tiện
{
RuntoTunnel(); //Phương tiện di chuyển về phía hầm
EnterTunnel(direction); //Đi vào hầm theo hướng direction
PassTunnel(); //Qua hầm
ExitTunnel(direction); //Rời khỏi hầm theo hướng direction.
}
Hãy viết lại các hàm EnterTunnel(direction) và ExitTunnel(direction) kiểm soát
giao thông qua hầm sao cho:
a. Tại mỗi thời điểm chỉ cho phép tối đa 3 phương tiện lưu thông qua hầm theo
hướng bất kỳ.
b. Tại mỗi thời điểm chỉ cho phép tối đa 3 phương tiện lưu thông cùng hướng qua
hầm.
Đáp án :
Semaphore max=3;
EnterTunnel(direction) ExitTunnel()
{ {
down(max); ...
... up(max);
} }
Baøi toaùn giöõ xe maùy
• Toång soá choã toái ña trong baõi giöõ xe: 100 choã
• Semaphore socho = 100;
• Giöõ xe ()
{
down(socho);
Ñaët xe vaøo baõi();
}

• Laáy xe ()
{
Laáy xe ra khoûi baõi ();
up(socho);
}

You might also like