Việc quản lý tính toàn vẹn của thông tin được chia sẻ chủ yếu dựa vào quá trình đồng bộ hóa. Để xử lý các vấn đề quan trọng của bộ phận, cả giải pháp phần mềm và phần cứng đều có sẵn.
Mặt khác, các giải pháp phần cứng cho vấn đề phần quan trọng là cực kỳ khó thực hiện. Hãy xem xét và so sánh Mutex và Semaphore, hai giải pháp ứng dụng để xử lý các vấn đề quan trọng của phần.
Các nội dung chính
- Mutex đảm bảo loại trừ lẫn nhau, chỉ cho phép một luồng truy cập vào tài nguyên được chia sẻ tại một thời điểm.
- Semaphore kiểm soát quyền truy cập vào tài nguyên bằng cách quản lý một số giấy phép cố định, cho phép nhiều luồng truy cập đồng thời vào tài nguyên.
- Mutexes sử dụng đơn giản hơn, trong khi semaphores cung cấp sự linh hoạt hơn trong việc kiểm soát quyền truy cập vào các tài nguyên được chia sẻ.
Mutex vs Semaphore
Một mutex (viết tắt của loại trừ lẫn nhau) là một loại khóa được sử dụng để đảm bảo rằng chỉ một luồng hoặc quy trình có thể truy cập vào tài nguyên được chia sẻ tại một thời điểm. Semaphore là một cơ chế quản lý quyền truy cập vào tài nguyên được chia sẻ thông qua bộ đếm kiểm soát quyền truy cập, với các giá trị khác nhau biểu thị các trạng thái khác nhau của tài nguyên.

Mutex là viết tắt của Đối tượng loại trừ lẫn nhau. Đó là một loại semaphore nhị phân được sử dụng để hạn chế quyền truy cập vào tài nguyên được chia sẻ. Để tránh những lo ngại về đảo ngược ưu tiên kéo dài, nó có cơ chế kế thừa ưu tiên.
Nó cho phép chặn các công việc có mức độ ưu tiên cao hơn hiện có trong khoảng thời gian ngắn nhất có thể. Mặt khác, kế thừa ưu tiên không khắc phục đảo ngược ưu tiên; thay vào đó, nó làm giảm tác động của nó.
Semaphore là một biến không âm được duy trì giữa các luồng. Semaphore là một cơ chế báo hiệu và một luồng khác có thể báo hiệu một luồng đang chờ semaphore.
Để đồng bộ hóa quy trình, nó sử dụng hai thủ tục cơ bản: () chờ và () tín hiệu. Tùy thuộc vào cách thiết lập, semaphore sẽ cho phép hoặc ngăn chặn quyền truy cập vào tài nguyên.
Bảng so sánh
Các thông số so sánh | đột biến | đèn hiệu |
---|---|---|
Cơ chế | Đó là một hệ thống khóa. | Đó là một hệ thống báo hiệu nào đó. |
Mục đích | Chủ đề được đại diện bởi mutex. | Các tiến trình được biểu diễn bằng semaphore. |
Thiên nhiên | Mutex là nguyên tử và số ít. | Semaphore có bản chất nguyên tử, nhưng không phải là số ít. |
Loại dữ liệu | Mutex không hơn gì một phần mềm. | Semaphore là một biến có giá trị nguyên. |
Các loại | Mutex không có bất kỳ kiểu con nào. | Đếm và semaphores nhị phân là hai loại semaphores. |
Sửa đổi | Chỉ quy trình có thể yêu cầu hoặc giải phóng tài nguyên mới có thể sửa đổi nó. | Một semaphore có thể được sửa đổi bằng cách sử dụng các hàm chờ và tín hiệu. |
Mutex là gì?
Loại trừ lẫn nhau là một thuật ngữ được sử dụng để mô tả một tình huống. Mutex là tên viết tắt của đối tượng. Chúng ta có thể suy ra từ loại trừ lẫn nhau rằng chỉ có một chương trình tại thời điểm đó có quyền truy cập vào một tài nguyên cụ thể.
Đối tượng mutex cho phép nhiều luồng ứng dụng truy cập cùng một tài nguyên tại cùng một thời điểm, mỗi lần chỉ một luồng.
Bất cứ khi nào một chương trình yêu cầu hệ thống cung cấp tài nguyên, hệ thống sẽ tạo một đối tượng mutex có danh tính hoặc ID duy nhất. Kết quả là, bất cứ khi nào chương trình muốn sử dụng tài nguyên đó, nó sẽ khóa đối tượng.
Sau đó, chương trình sử dụng tài nguyên trước khi giải phóng đối tượng mutex. Sau đó, đối tượng mutex có thể được tạo và sử dụng bởi các chương trình khác theo cách tương tự.
Bằng cách khóa đối tượng, tài nguyên cụ thể đó được gán cho quy trình cụ thể đó và không quy trình nào khác có thể sử dụng nó. Do đó, không có chương trình nào khác được phép sử dụng tài nguyên hệ thống trong khu vực quan trọng. Một đối tượng mutex có thể được sử dụng để thực hiện đồng bộ hóa quy trình theo cách này.
Một mutex cho phép loại trừ lẫn nhau, vì nhà sản xuất hoặc người tiêu dùng có thể có khóa (mutex) và tiếp tục làm việc. Người tiêu dùng phải đợi cho đến khi bộ đệm của nhà sản xuất được lấp đầy và ngược lại.
Semaphore là gì?
Semaphore là một biến số nguyên S được sử dụng để đồng bộ hóa tiến trình và được khởi tạo bằng số lượng tài nguyên trong hệ thống. Để sửa đổi giá trị của S, nó sử dụng hai hàm chính: wait() và signal().
Cả hai chức năng này được sử dụng để thay đổi giá trị của một semaphore, nhưng chúng chỉ cho phép một chương trình thực hiện việc này tại một thời điểm, do đó không có hai phương thức nào có thể thay đổi giá trị của một semaphore cùng một lúc. Đếm semaphores và nhị phân semaphores là hai loại semaphores.
Biến semaphore được khởi tạo đầu tiên với số lượng tài nguyên có sẵn trong khi đếm semaphore. Phương thức wait() sau đó được thực thi bất cứ lúc nào một quá trình yêu cầu tài nguyên và giá trị của biến semaphore bị giảm đi một.
Sau đó, quá trình sử dụng tài nguyên, sau đó nó gọi phương thức signal(), phương thức này làm tăng giá trị của biến semaphore lên một đơn vị. Bất cứ khi nào giá trị của biến semaphore đạt 0, nghĩa là khi chương trình đã sử dụng hết tất cả tài nguyên và không còn tài nguyên nào để sử dụng,
Sau đó, nếu một quá trình khác cần sử dụng tài nguyên, nó sẽ phải đợi thời gian của nó. Chúng tôi thiết lập đồng bộ hóa quy trình theo cách này.
Trong Dấu hiệu nhị phân, giá trị của biến dấu hiệu là 0 hoặc 1. Khi một quy trình muốn sử dụng tài nguyên, phương thức wait() được gọi và giá trị của dấu hiệu được điều chỉnh thành 0 từ 1.
Sau đó, quy trình sử dụng tài nguyên và sau khi hoàn thành, phương thức signal() được gọi và giá trị của biến semaphore được đặt thành 1.
Nếu giá trị của biến semaphore là 0 tại một thời điểm nhất định và một chương trình khác muốn truy cập cùng một tài nguyên, nó phải đợi chương trình trước đó giải phóng các truy vấn. Quá trình đồng bộ hóa có thể được thực hiện theo cách này. Nó có thể so sánh với một mutex, nhưng nó không khóa bất cứ thứ gì.

Sự khác biệt chính giữa Mutex và Semaphore
- Mutex sử dụng cơ chế khóa, có nghĩa là nếu một quy trình cần sử dụng tài nguyên, trước tiên nó phải khóa tài nguyên đó, sử dụng rồi giải phóng tài nguyên đó. Mặt khác, Semaphore sử dụng một kỹ thuật báo hiệu trong đó các hàm wait() và signal() được sử dụng để chỉ ra liệu một quá trình đang cung cấp hay tiêu thụ một tài nguyên.
- Một mutex là một đối tượng, trong khi một semaphore là một biến có giá trị nguyên.
- Một đối tượng mutex yêu cầu các luồng quy trình khác nhau để kết nối cùng một tài nguyên có thể chia sẻ cùng một lúc. Mặt khác, Semaphore cho phép một số luồng quy trình truy cập vào thể hiện hữu hạn của tài nguyên cho đến khi nó có thể truy cập được.
- Trong mutex, khóa có thể được lấy và giải phóng theo cùng một quy trình tại cùng một thời điểm. Tuy nhiên, giá trị của biến semaphore có thể được thay đổi bởi bất kỳ quy trình nào yêu cầu tài nguyên, nhưng chỉ một quy trình có thể thay đổi giá trị tại một thời điểm.
- Mutex cho phép các luồng chương trình khác nhau truy cập vào cùng một tài nguyên được chia sẻ, nhưng chỉ một lần tại một thời điểm, trong khi đó, Semaphore yêu cầu nhiều luồng chương trình khác nhau để kết nối một số lượng hạn chế các tài nguyên cùng một lúc.