VẤN ĐỀ VỀ ĐÈN HIỆU

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

VẤN ĐỀ VỀ ĐÈN HIỆU

Bài gửi  lamtienkhoa(102c) on 22/4/2012, 19:01

Câu 1:Ứng dụng của đèn hiệu

Code:
typedef int semaphore; // Định nghĩa kiểu đèn hiệu
wait (semaphore S)
{
while ( S <= 0 ); // Chờ bận nếu S<=0
S --; // Giảm S đi 1
}
signal (semaphore S)
{
S ++; // Tăng S lên 1
}


- Việc kiểm tra S<=0 và giảm S hoặc tăng S phải được thực hiện trọn vẹn(Không xảy ra ngắt trong thời gian thi hành).
*Ứng dụng:
-1.Giải quyết vấn đề VTT: Bằng đèn hiệu nhị phân

-Sử dụng đèn hiệu mutex với trạng thái ban đầu =1

+ Mã của tiến trình Pi bây giờ có cấu trúc:

Code:
typedef int semaphore;
semaphore mutex=1; // Binary Semaphore
while (1) // (Đèn hiệu nhị phân)
{
remainder section
wait (mutex);
critical section
signal (mutex);
remainder section
}
=> Loại trừ tính tương tranh, đảm bảo trong 1 thời điểm chỉ có 1 tiến trình ở đoạn tương tranh.


- 2. Đảm bảo trật tự cần thiết:

Giả sử P1 có mã S1,P2 có mã S2,cần tổ chức sao cho S2 chỉ thi hành sau S1.
+Ta dùng đèn hiệu sau:
semaphore synch = 0;
Cấu trúc P1:
S1
signal (synch) ;


Cấu trúc P2:
wait(synch);
S2


Câu 2:Thực thi đèn hiệu trong windows

-Theo định nghĩa(TĐN):

typedef int semaphore;
semaphore s = n;//n là giá trị ban đầu của đèn hiệu.
wait (s);
signal (s);

-Thực thi trong C++(TH):

HANDLE s;
s=CreateSemaphore (0, n, max, t);//max là giá trị tối đa của đèn hiệu
// t – Tên đèn hiệu hoặc t =0
// n- Giá trị ban đầu của đèn hiệu

WaitForSingleObject (s, timeout); /* timeout = INFINITE hoặc số mili giây chờ */

ReleaseSemaphore (s, 1, NULL);

lamtienkhoa(102c)

Tổng số bài gửi : 43
Join date : 28/02/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết