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 chung 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. Monitor 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 chung cùng một lúc do đó đảm bảo loại trừ lẫn nhau. Màn hình sử dụng các biến có đ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 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 (trong lịch sử được gọi là P) và tín hiệu (trong lịch sử được gọi là V). Hoạt động chờ chặn một quy trình cho đến khi semaphore được mở và hoạt động tín hiệu cho phép một quy trình (luồng) khác đi vào. Mỗi semaphore được liên kết với một hàng các quá trình chờ đợi. Khi hoạt động chờ được gọi bởi một luồng, nếu semaphore được mở, luồng có thể tiếp tục. Nếu semaphore bị đóng khi hoạt động chờ được gọi bởi một luồng, thì luồng bị chặn và nó phải chờ trong hàng đợi. Hoạt động tín hiệu mở một semaphore và nếu có một luồng đang chờ trong hàng đợi, quá trình đó được phép tiến hành và nếu không có luồng nào chờ trong hàng đợi, tín hiệu sẽ được ghi nhớ cho các luồng tiếp theo. Có hai loại semaphores được gọi là mutex semaphores và đếm semaphores. Mutap semaphores cho phép một quyền truy cập vào một tài nguyên và đếm semaphores cho phép nhiều luồng truy cập vào một tài nguyên (có sẵn một số đơn vị).
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 được chia sẻ. Màn hình đóng gói các cấu trúc dữ liệu được 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 yêu cầu 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 cập không có cấu trúc và đảm bảo rằng các đường dẫn (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 loại trừ lẫn nhau bằng cách chỉ cho phép một luồng thực hiện bất kỳ thủ tục giám sát nào tại một thời điểm nhất định. Nếu một luồng khác cố gắng gọi một phương thức trong màn hình, trong khi một luồng đang thực hiện một thủ tục trong màn hình, thì thủ tục thứ hai sẽ bị chặn và nó phải chờ 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 về ngữ nghĩa lịch trình của họ.
Sự khác biệt giữa Semaphore và Monitor?
Mặc dù cả 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, chúng khác nhau về các kỹ thuật được sử dụng để đạt được nhiệm vụ này. Trong các màn hình, mã được sử dụng để đạt được loại trừ lẫn nhau nằm ở một nơi duy nhất và có cấu trúc chặt chẽ hơn, trong khi mã cho các semaphores được phân phối dưới dạng chờ và gọi hàm tín hiệu. Ngoài ra, rất dễ mắc lỗi khi thực hiện semaphores, trong khi có rất ít cơ hội để mắc lỗi khi thực hiện màn hình. Hơn nữa, màn hình sử dụng các biến điều kiện, trong khi semaphores thì không.