Mutex vs Semaphore: Sự khác biệt và so sánh

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

  1. 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.
  2. 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.
  3. 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 vs Semaphore

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 đíchChủ đề được đại diện bởi mutex.Các tiến trình được biểu diễn bằng semaphore.
Thiên nhiênMutex 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ệuMutex 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ạiMutex không có bất kỳ kiểu con nào.Đếm và semaphores nhị phân là hai loại semaphores.
Sửa đổiChỉ 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.
Ghim cái này ngay để nhớ sau
Ghim cái này

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

Cũng đọc:  Machine Learning vs Deep Learning: Sự khác biệt và so sánh

Đố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.

Cũng đọc:  Fedora vs OpenSUSE: Sự khác biệt và so sánh

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

đèn hiệu

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

  1. 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.
  2. Một mutex là một đối tượng, trong khi một semaphore là một biến có giá trị nguyên.
  3. 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.
  4. 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.
  5. 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.
dự án
  1. https://dl.acm.org/doi/abs/10.1145/362759.362813
  2. https://lib.hpu.edu.vn/handle/123456789/21469

Một yêu cầu?

Tôi đã nỗ lực rất nhiều để viết bài đăng trên blog này nhằm cung cấp giá trị cho bạn. Nó sẽ rất hữu ích cho tôi, nếu bạn cân nhắc chia sẻ nó trên mạng xã hội hoặc với bạn bè/gia đình của bạn. CHIA SẺ LÀ ♥️

Bạn muốn lưu bài viết này cho sau này? Nhấp vào trái tim ở góc dưới cùng bên phải để lưu vào hộp bài viết của riêng bạn!

về tác giả

Chara Yadav có bằng MBA về Tài chính. Mục tiêu của cô là đơn giản hóa các chủ đề liên quan đến tài chính. Cô đã làm việc trong lĩnh vực tài chính khoảng 25 năm. Cô đã tổ chức nhiều lớp học về tài chính và ngân hàng cho các trường kinh doanh và cộng đồng. Đọc thêm tại cô ấy trang sinh học.