Phương pháp dùng Semaphore

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

Phương pháp dùng Semaphore

Bài gửi  Phamvantoan(I22A) on 31/3/2013, 13:58

Semaphore là đối tượng được cung cấp sẵn bởi hệ thống, đối tượng
này gồm :
ƒ 1 thuộc tính chứa giá trị nguyên dương, ta gọi là biến semaphore s.
ƒ hàm down(s) có chức năng giảm s 1 đơn vị, nếu giảm không được thì
phải chờ đến khi có điều kiện giảm được thì làm lại. Thời gian thực
hiện hàm down có thể rất dài, nhưng các process khác không thể
thấy được trạng thái trung gian của hàm down này. Nói cách khác
việc thi hành hàm down có tính nguyên tử, không chia cắt được.
ƒ hàm up(s) có chức năng tăng s 1 đơn vị, nếu sau khi tăng mà s = 1 thì
phải đánh thức các process đang ngủ vì đã thực hiện down(s) trước
đây mà chưa được. Thời gian thực hiện hàm up rất nhanh, việc thi
hành hàm up cũng có tính nguyên tử, không chia cắt được.
Ta có thể dùng Semaphore để giải quyết tương tranh giữa nhiều process
như sau :
ƒ kết hợp 1 semaphore nhị phân với vùng CS tương ứng. Semaphore
này sẽ được gán trị đầu là 1 và sau này nó chỉ có thể chứa 2 trị : hoặc
0 hoặc 1. Ta gọi semaphore này là semaphore nhị phân.
ƒ hàm In_Control() để kiểm soát vào vùng CS của process sẽ là lời gọi
hàm down (s).
ƒ hàm Out_Control() để kiểm soát ra vùng CS của process sẽ là lời gọi
hàm up (s).
Như vậy, tại 1 thời điểm chỉ có 1 process down(s) được và vào vùng CS,
các process khác nếu down(s) đều bị thất bại và phải ngủ chờ. Khi
process đầu tiên thực hiện xong CS, nó thực hiện up(s) và sẽ đánh thức

Phamvantoan(I22A)

Tổng số bài gửi : 13
Join date : 13/03/2013
Age : 26
Đến từ : Thanh Hóa

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