Mutex vs Semaphore
Một mutex tương tự như một chìa khóa duy nhất cho một căn phòng. Một người cầm chìa khóa, tương tự như một sợi chỉ, là người duy nhất có thể có quyền truy cập vào phòng. Người có quyền truy cập sau đó sẽ phải nhường chìa khóa cho người tiếp theo trong hàng. Do đó, một mutex chỉ có thể được phát hành bởi chủ đề có được nó.
Một mutex thường được sử dụng để tuần tự hóa quyền truy cập vào một phần của mã reentrant 'một loại mã không thể được thực thi bởi một số luồng cùng một lúc. Chỉ một chủ đề 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 đợi để chờ đợi. Trước khi một chủ đề đạt được quyền truy cập, nó sẽ phải đợi cho đến khi chủ đề trước khi nó từ bỏ phần.
Sử dụng sự tương tự trong mutex, semaphores là số lượng các khóa tương tự có thể truy cập vào cùng một số phòng có khóa tương tự. Một semaphore hoặc giá trị của một semaphore sẽ phụ thuộc vào số lượng người (chủ đề) người vào hoặc ra khỏi phòng. Nếu có 5 phòng và tất cả chúng đều bị chiếm đóng, thì số lượng semaphore bằng không. Nếu hai người rời khỏi phòng, thì số đếm là hai và hai chìa khóa được trao cho hai người tiếp theo trong hàng đợi.
Với điều đó đã được nói, semaphores có thể được báo hiệu đồng thời bởi bất kỳ luồng hoặc quá trình nào và lý tưởng cho các ứng dụng yêu cầu đồng bộ hóa. Tuy nhiên, semaphores được sử dụng để hạn chế hiệu quả 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 semaphore tối đa.
Về cơ bản, một mutex có thể được coi là một semaphore có giá trị là một.
Sự giảm và tăng của semaphore phụ thuộc vào việc các luồng có yêu cầu quyền truy cập vào tài nguyên chung hay rời khỏi phần.
Về lý thuyết, các ngữ nghĩa mutex và (nhị phân) giống nhau về mặt ngữ nghĩa. Việc thực hiện mutex có thể được thực hiện bằng cách sử dụng semaphores và cách khác cũng vậy. Tuy nhiên, trong ý nghĩa thực tế, chúng có thể khác một chút.
Mutexes được dự định chỉ được áp dụng cho loại trừ lẫn nhau và các ngữ nghĩa nhị phân được dự định sẽ được 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 về mặt triển khai và ngữ nghĩa chung, chúng được sử dụng khác nhau.
Tóm lược:
1. Mutex thường được sử dụng để tuần tự hóa quyền truy cập vào một tài nguyên chung trong khi semaphore là một số truy cập đồng thời.
2. Mutex giống như một semaphore với số lượng một.
3. Mutex chỉ cho phép một luồng duy nhất có quyền truy cập trong khi semaphores có thể được báo hiệu đồng thời bởi bất kỳ luồng hoặc quá trình nào.
4. Semaphores lý tưởng cho việc đồng bộ hóa và thường được sử dụng để 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.