Sự khác biệt giữa Semaphore và Monitor

Anonim

Semaphore vs Màn hình

Semaphore là một cấu trúc dữ liệu được sử dụng để đảm bảo rằng nhiều quy trình không truy cập vào một tài nguyên hoặc một phần quan trọng cùng một lúc, trong các môi trường lập trình song song. Semaphores được sử dụng để tránh khóa chết và điều kiện cuộc đua. Màn hình là một cấu trúc ngôn ngữ lập trình cũng được sử dụng để tránh nhiều quá trình truy cập vào một tài nguyên thông thường cùng một lúc do đó đảm bảo loại trừ lẫn nhau. Các màn hình sử dụng các biến điều kiện để đạt được nhiệm vụ này.

Semaphore là gì?

Semaphore là một cấu trúc dữ liệu được sử dụng để cung cấp sự loại trừ lẫn nhau cho các phần quan trọng. Semaphores chủ yếu hỗ trợ hai hoạt động được gọi là chờ đợi (được biết đến như là P) và tín hiệu (trước đây gọi là V). Các hoạt động chờ đợi chặn một quá trình cho đến khi semaphore được mở và hoạt động tín hiệu cho phép một quá trình (thread) để nhập. Mỗi semaphore được liên kết với một hàng đợi các quá trình chờ đợi. Khi hoạt động chờ đợi được gọi bởi một sợi, nếu semaphore được mở, thread có thể tiếp tục. Nếu semaphore đóng lại khi thao tác wait được gọi bởi một thread, thread bị khóa và nó phải đợi trong hàng đợi. Hoạt động của tín hiệu mở ra một semaphore và nếu có một thread đã chờ đợi trong hàng đợi, tiến trình đó được phép tiến hành và nếu không có các luồng chờ đợi trong hàng đợi thì tín hiệu sẽ được nhớ cho các luồng kế tiếp. Có hai loại semaphores gọi là mutex semaphores và đếm semaphores. Các semaphore Mutex cho phép truy cập một tài nguyên và đếm các semaphores cho phép nhiều luồng truy cập vào một tài nguyên (có nhiều đơn vị có sẵn).

Màn hình là gì?

Một màn hình là một cấu trúc ngôn ngữ lập trình được sử dụng để kiểm soát truy cập vào dữ liệu chia sẻ. Các màn hình đóng gói các cấu trúc dữ liệu chia sẻ, các thủ tục (hoạt động trên các cấu trúc dữ liệu được chia sẻ) và đồng bộ hóa giữa các cuộc gọi thủ tục đồng thời. Một màn hình đảm bảo rằng dữ liệu của nó không phải đối mặt với các truy xuất không có cấu trúc và đảm bảo rằng các bước nhảy (truy cập dữ liệu của màn hình thông qua các thủ tục của nó) tương tác một cách hợp pháp. Một màn hình đảm bảo sự loại trừ lẫn nhau bằng cách cho phép chỉ có một sợi để thực hiện bất kỳ thủ tục giám sát tại một thời điểm nhất định. Nếu một thread khác cố gắng gọi một phương thức trong màn hình, trong khi một thread đang thực hiện một thủ tục trong màn hình, thì thủ tục thứ hai bị chặn và nó phải đợi trong hàng đợi. Có hai loại màn hình có tên là Màn hình Hoare và Màn hình Mesa. Họ chủ yếu khác nhau trong ngữ nghĩa lịch trình của họ.

Khác biệt giữa Semaphore và Monitor là gì?

Mặc dù cả hai semaphores và màn hình được sử dụng để đạt được loại trừ lẫn nhau trong môi trường lập trình song song, họ khác nhau trong các kỹ thuật được sử dụng để thực hiện nhiệm vụ này.Trong các màn hình, mã được sử dụng để đạt được sự loại trừ lẫn nhau ở một nơi duy nhất và có cấu trúc hơn, trong khi mã cho semaphores được phân phối như các cuộc gọi chức năng chờ và tín hiệu. Ngoài ra, rất dễ mắc phải sai lầm khi thực hiện các semaphores, trong khi có rất ít cơ hội để mắc lỗi khi triển khai các màn hình. Hơn nữa, giám sát các biến điều kiện sử dụng, trong khi semaphores không.