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

Anonim

Semaphore và Mutex

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 được thông tin chung 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. Mutex (Mutual Exclusion Object) cũng được sử dụng để tránh truy cập vào một tài nguyên thông thường cùng một lúc bởi một số quy trình đồng thời.

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).

Mutex là gì?

Khi một ứng dụng máy tính được khởi động, nó sẽ tạo ra một mutex và gắn nó vào một tài nguyên. Khi tài nguyên được sử dụng bởi một chủ đề, nó bị khóa và chủ đề khác không thể sử dụng nó. Nếu một thread khác muốn sử dụng cùng một tài nguyên, nó sẽ phải làm một yêu cầu. Sau đó thread đó sẽ được đặt trong một hàng đợi cho đến khi chủ đề đầu tiên kết thúc với tài nguyên. Khi chủ đề đầu tiên kết thúc với tài nguyên, khóa sẽ được gỡ bỏ và chủ đề đợi trong hàng đợi có thể truy cập vào tài nguyên. Nếu có nhiều luồng chờ đợi trong hàng đợi, chúng sẽ được truy cập một cách luân phiên. Thực tế, khi mutex thay thế quyền truy cập vào một tài nguyên giữa nhiều luồng, nó sẽ được hiển thị như nhiều chủ đề đang tiêu thụ một nguồn lực cùng một lúc. Nhưng nội bộ chỉ có một sợi duy nhất đang truy cập vào tài nguyên tại một thời điểm nhất định.

Sự khác nhau giữa Semaphore và Mutex là gì?

Mặc dù cả hai semaphores và mutex đối tượng được sử dụng để đạt được lẫn nhau trong môi trường lập trình song song, họ có một số khác biệt. Một đối tượng mutex chỉ cho phép một luồng duy nhất sử dụng một tài nguyên hoặc một phần quan trọng, trong khi semaphores cho phép một số lượng hạn chế truy cập đồng thời vào một tài nguyên (dưới một số cho phép tối đa).Với các đối tượng mutex, các chủ đề khác muốn truy cập tài nguyên phải đợi trong hàng đợi, cho đến khi chủ đề hiện tại kết thúc bằng cách sử dụng tài nguyên.