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

Anonim

Mutex vs Semaphore

Một mutex tương tự như một chìa khóa duy nhất vào một căn phòng. Một người giữ chìa khóa, tương tự như một sợi chỉ, là người duy nhất có thể truy cập vào phòng. Người có quyền truy cập sau đó sẽ phải bỏ chìa khóa để tiếp theo người trong hàng. Vì vậy, một mutex chỉ có thể được phát hành bởi các sợi thu được nó.

Một mutex thường được sử dụng để serialize truy cập vào một phần của mã reentrant một loại mã mà không thể được thực hiện bởi một số chủ đề cùng một lúc. Chỉ một sợi duy nhất được phép vào một phần. Điều này buộc các chủ đề khác trong hàng chờ. Trước khi một thread truy cập được, nó sẽ phải đợi cho đến khi thread trước khi nó đưa ra phần.

Sử dụng cùng một phép tương tự trong mutex, semaphores là số các phím tương tự có thể truy cập vào cùng một số phòng với các ổ khóa tương tự. Một semaphore hoặc giá trị của một số semaphore sẽ phụ thuộc vào số người (chủ đề) vào hoặc ra khỏi phòng. Nếu có 5 phòng và tất cả đều chiếm, thì số đếm là 0. Nếu hai rời khỏi phòng, thì đếm là hai và hai phím được cho hai tiếp theo trong hàng đợi.

Với điều đó được nói, semaphores có thể được đồng thời tín hiệu của bất kỳ thread hoặc quá trình và lý tưởng cho các ứng dụng đó là yêu cầu đồng bộ. Tuy nhiên, semaphores được sử dụng để có hiệu quả hạn chế số lượng người dùng đồng thời của một tài nguyên chung dựa trên số lượng ký hiệu tối đa.

Về cơ bản, một mutex có thể được xem như là một semaphore có giá trị của một.

Sự suy giảm và gia tăng của semaphore phụ thuộc vào việc các chủ đề yêu cầu truy cập vào tài nguyên chung hay rời khỏi phần.

Theo lý thuyết, semaphore mutex và (nhị phân) là ngữ nghĩa tương tự. Việc thực hiện các mutex có thể được thực hiện bằng cách sử dụng semaphores và do đó, là cách khác xung quanh. Tuy nhiên, về mặt thực tế, chúng có thể khác một chút.

Mutexes chỉ được áp dụng cho loại trừ lẫn nhau và các semaphore nhị phân được dự định sử dụng để loại trừ lẫn nhau và thông báo sự kiện. Mặc dù chúng rất giống nhau trong việc thực hiện và ngữ nghĩa chung nhưng chúng được sử dụng khác nhau.

Tóm tắt:

1. Mutex thường được sử dụng để serialize truy cập vào một tài nguyên phổ biến trong khi một semaphore là một số truy cập đồng thời.

2. Mutex giống như một semaphore với một trong số đó.

3. Mutex chỉ cho phép một luồng duy nhất có thể truy cập trong khi semaphores có thể đồng thời được tín hiệu bởi bất kỳ luồng hoặc quy trình nào.

4. Semaphores lý tưởng để đồng bộ hóa và thường được sử dụng cho thông báo sự kiện và loại trừ lẫn nhau trong khi mutex chỉ được áp dụng để loại trừ lẫn nhau.