Phương pháp dùng Semaphore
Trang 1 trong tổng số 1 trang
Phương pháp dùng Semaphore
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
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 : 34
Đến từ : Thanh Hóa
Similar topics
» Xét một giải pháp semaphore đúng cho bài toán Dining philosophers
» HỎI THỦ THUẬT?
» các phương pháp sử dụng C# đây(sưu tầm thôi)
» Thảo luận Bài 8
» Dùng Semaphore giải quyết bài toán Sản xuất — Tiêu dùng
» HỎI THỦ THUẬT?
» các phương pháp sử dụng C# đây(sưu tầm thôi)
» Thảo luận Bài 8
» Dùng Semaphore giải quyết bài toán Sản xuất — Tiêu dùng
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết