هر سه تقریبا یکی هستن و کمک به رفع Race Condition با استفاده از Lock در بحث Multi Threading می پردازن. ولی تفاوت های ریزی باهمدیگه دارن.
Mutex: درصورت استفاده از رفرنس، رفرنس Lock می شود تا عملیات تمام بشه.
Semaphore:
1- (Integer (Counting: تعداد تردهایی که میتونن به یه آبجکت یا سکشن کد دسترسی داشته باشن رو محدود میکنه.
2- binary: باینری ۰ و ۱ هست. یعنی یا Lock هست یا نیست.مثل mutex
Monitor: این هم کارش مثل Mutex
ولی تفاوت ها!
تفاوت Mutex و Semaphore Binary
- تفاوت در بحث کنترل کنندگی است یعنی Mutex فقط خودش میتونه آبجکت خودش رو از حالت Lock در بیاره ولی در Semaphore هر آبجکت دیگری توانایی تغییر حالت Lock رو داره.
تفاوت Monitor و Mutex هم به صورت کلی نوع پیاده سازیشون هست. جزئی ترش میشه:
- Monitor بر خلاق Mutex بحث مالتی تردینگ رو در یک پروسه انجام میده. پس سبک تر و سریع تره ولی Mutex چون بین چند پروسه هست سنگین تر و آهسته تره.
- Monitor توسط خود کتابخانه های فریم ورک پیاده سازی میشن ولی Mutex توسط کرنل OS پیاده سازی میشه.
بنظرم بعضی جاهاش رو شاید بشه یه کوچولو بهتر کرد. مثلا تعریف counting semaphore میتونه بشه تعداد تردهای که میتونن به یه آبجکت یا سکشن کد دسترسی داشته باشن رو محدود میکنه اره موافقم، توضیح مفید تریه. اصلاحش کردم