Sự khác biệt chính giữa Màn hình và Semaphore là gì?
Sự khác biệt chính giữa Màn hình và Semaphore là gì?
Câu trả lời:
Một Monitor là một đối tượng được thiết kế để được truy cập từ nhiều luồng. Các chức năng hoặc phương thức thành viên của một đối tượng giám sát sẽ thực thi loại trừ lẫn nhau, do đó chỉ một luồng có thể thực hiện bất kỳ hành động nào trên đối tượng tại một thời điểm nhất định. Nếu một luồng hiện đang thực thi chức năng thành viên của đối tượng thì bất kỳ luồng nào khác cố gọi hàm thành viên của đối tượng đó sẽ phải đợi cho đến khi luồng đầu tiên kết thúc.
Một Semaphore là một đối tượng cấp dưới. Bạn cũng có thể sử dụng một semaphore để thực hiện một màn hình. Một semaphore về cơ bản chỉ là một truy cập. Khi bộ đếm dương, nếu một luồng cố gắng thu được semaphore thì nó được phép và bộ đếm bị giảm. Khi một luồng được thực hiện thì nó sẽ giải phóng semaphore và tăng bộ đếm.
Nếu bộ đếm đã bằng 0 khi một luồng cố gắng thu được semaphore thì nó phải đợi cho đến khi một luồng khác giải phóng semaphore. Nếu nhiều luồng đang chờ khi một luồng phát hành một semaphore thì một trong số chúng sẽ nhận được nó. Các chủ đề phát hành một semaphore không cần phải là cùng một chủ đề có được nó.
Một màn hình giống như một nhà vệ sinh công cộng. Chỉ một người có thể nhập tại một thời điểm. Họ khóa cửa để ngăn chặn bất kỳ ai khác bước vào, làm công việc của họ và sau đó mở khóa khi họ rời đi.
Một semaphore giống như một nơi thuê xe đạp. Họ có một số lượng xe đạp nhất định. Nếu bạn thử và thuê một chiếc xe đạp và họ có một chiếc miễn phí thì bạn có thể lấy nó, nếu không bạn phải chờ. Khi ai đó trả lại xe đạp thì người khác có thể lấy nó. Nếu bạn có một chiếc xe đạp thì bạn có thể đưa nó cho người khác trả lại --- nơi thuê xe đạp không quan tâm ai trả lại, miễn là họ lấy lại được xe đạp.
Giải thích sau đây thực sự giải thích sự chờ đợi () và tín hiệu () của màn hình khác với P và V của semaphore.
Các hoạt động Wait () và signal () trên các biến điều kiện trong một màn hình tương tự như các hoạt động P và V khi đếm các semaphores .
Một câu lệnh chờ có thể chặn quá trình thực thi của một tiến trình, trong khi một câu lệnh tín hiệu có thể khiến một tiến trình khác bị bỏ chặn. Tuy nhiên, có một số khác biệtgiữa họ. Khi một quá trình thực hiện một hoạt động P, nó không nhất thiết phải chặn quá trình đó bởi vì semaphore đếm có thể lớn hơn 0. Ngược lại, khi một câu lệnh chờ được thực thi, nó luôn chặn quá trình. Khi một tác vụ thực thi thao tác V trên semaphore, nó sẽ bỏ chặn một tác vụ đang chờ trên semaphore đó hoặc tăng bộ đếm semaphore nếu không có nhiệm vụ để mở khóa. Mặt khác, nếu một quá trình thực thi một tuyên bố tín hiệu khi không có quá trình nào khác để bỏ chặn, thì không có ảnh hưởng đến biến điều kiện. Một điểm khác biệt giữa semaphores và màn hình là người dùng được đánh thức bởi thao tác V có thể tiếp tục thực hiện mà không bị trì hoãn. Ngược lại, người dùng được đánh thức bởi một hoạt động tín hiệu chỉ được khởi động lại khi màn hình được mở khóa. Ngoài ra,
Liên kết: ở đây để đọc thêm. Hy vọng nó giúp.
Semaphore cho phép nhiều luồng (tối đa một số được đặt) truy cập vào một đối tượng được chia sẻ. Màn hình cho phép truy cập lẫn nhau vào một đối tượng chia sẻ.
java.util.ArrayList
: nó là một đối tượng hoặc nơi chứa nhiều đối tượng? Vâng, đó là cả hai cùng một lúc. Vì vậy, semaphore có thích hợp để kiểm soát truy cập vào nó? Tôi sẽ nói không.
Khi một semaphore được sử dụng để bảo vệ một khu vực quan trọng, không có mối quan hệ trực tiếp giữa semaphore và dữ liệu được bảo vệ. Đây là một phần lý do tại sao semaphores có thể bị phân tán xung quanh mã và tại sao dễ quên gọi chờ hoặc thông báo , trong trường hợp đó, kết quả sẽ là vi phạm loại trừ lẫn nhau hoặc khóa tài nguyên vĩnh viễn.
Ngược lại, không có những điều xấu này có thể xảy ra với một màn hình. Một màn hình mệt mỏi trực tiếp với dữ liệu (nó đóng gói dữ liệu) và, vì các hoạt động của màn hình là các hành động nguyên tử, không thể viết mã có thể truy cập dữ liệu mà không cần gọi giao thức nhập. Giao thức thoát được gọi tự động khi hoàn thành thao tác màn hình.
Một màn hình có một cơ chế tích hợp để đồng bộ hóa điều kiện dưới dạng biến điều kiện trước khi tiến hành. Nếu điều kiện không được thỏa mãn, quy trình phải đợi cho đến khi được thông báo về sự thay đổi trong điều kiện. Khi một quy trình đang chờ đồng bộ hóa điều kiện, việc triển khai màn hình sẽ xử lý vấn đề loại trừ lẫn nhau và cho phép một quy trình khác có quyền truy cập vào màn hình.
Lấy từ tài liệu khóa học "Quá trình tương tác" của Đại học Mở M362.
Semaphore:
Sử dụng bộ đếm hoặc cờ để kiểm soát truy cập một số tài nguyên được chia sẻ trong một hệ thống đồng thời, ngụ ý sử dụng Semaphore .
Thí dụ:
Cờ chỉ tiết lộ trạng thái Tài nguyên hiện tại, không có số lượng hoặc bất kỳ thông tin nào khác về các đối tượng đang chờ hoặc đang chạy trên tài nguyên.
Giám sát:
Một Monitor đồng bộ truy cập vào một đối tượng bằng cách giao tiếp với chủ đề quan tâm đối tượng, yêu cầu họ truy cập được hoặc chờ đợi đối với một số điều kiện để trở thành hiện thực.
Thí dụ: