Tin học
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

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

Go down

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

Bài gửi  lamtienkhoa(102c) 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

Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

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