تفاوت یک mutex با یک semaphore در چیست؟ برای محافظت از دسترسی به یک عملیات افزایشی از چه مواردی استفاده می کنید؟


پاسخ 1:

تعریف POSIX از semaphore نقطه شروع خوبی است:

semaphore یک عدد صحیح است که مقدار آن هرگز نباید از صفر پایین بیاید. دو عمل را می توان در سمفورها انجام داد: یک مقدار افزایش ارزش مستهجن توسط یک؛ و مقدار کلمات را با یک کاهش دهید. [1]

از نظر مفهومی ، یک mutex یک واژگان با ویژگی اضافی است که ارزش هرگز نباید از یک مقدار فراتر رود.

این محدودیت اضافی ، با این حال ، اجرای و استفاده از یك mutex را به اندازه كافی از پیاده سازی و استفاده از یك semaphore متمایز می كند تا در نظر گرفتن آنها به عنوان دو چیز جداگانه توجیه شود.

پاورقی

[1] sem_overview (7): بررسی اجمالی سمفورم های POSIX


پاسخ 2:

Semaphore یک اصطلاح عمومی است.

"Mutex" مخفف "semaphore for disclaimer reciprocate" است. این نوعی واضح است که فقط به یک موضوع اعدام اجازه می دهد تا از داده های محافظت شده توسط mutex در هر زمان استفاده کند.

همچنین سمفورهای شمرده شده ای وجود دارد که با استفاده از آنها می توان از داده های محافظت شده توسط سمفور در هر زمان معین تا حداکثر تعداد موضوعات استفاده کرد. با این حال ، این موارد بسیار نادر است.

برای محافظت از دسترسی به یک افزایش ، احتمالاً به یک mutex احتیاج دارید.

یک semaphore شمارش شده برای صف های اندازه ثابت مفید است. اگر شکافهای N در صف دارید ، می توانید N نویسندگان را برای نوشتن موارد در صف بیدار کنید. اگر موارد M در صف وجود دارد ، می توانید موضوعات M را فعال کنید تا آنها را از صف بخوانید.

توجه داشته باشید که در هر دو مورد احتمالاً شما دارای یک mutex یا برخی از متغیرهای اتمی هستید تا اطمینان حاصل کنید که فقط یک موضوع در یک زمان تغییر می کند ، به عنوان مثال. ب) نشانگر / فهرست برای نوشتن یا نشانگر / فهرست برای خواندن.


پاسخ 3:

Semaphore یک اصطلاح عمومی است.

"Mutex" مخفف "semaphore for disclaimer reciprocate" است. این نوعی واضح است که فقط به یک موضوع اعدام اجازه می دهد تا از داده های محافظت شده توسط mutex در هر زمان استفاده کند.

همچنین سمفورهای شمرده شده ای وجود دارد که با استفاده از آنها می توان از داده های محافظت شده توسط سمفور در هر زمان معین تا حداکثر تعداد موضوعات استفاده کرد. با این حال ، این موارد بسیار نادر است.

برای محافظت از دسترسی به یک افزایش ، احتمالاً به یک mutex احتیاج دارید.

یک semaphore شمارش شده برای صف های اندازه ثابت مفید است. اگر شکافهای N در صف دارید ، می توانید N نویسندگان را برای نوشتن موارد در صف بیدار کنید. اگر موارد M در صف وجود دارد ، می توانید موضوعات M را فعال کنید تا آنها را از صف بخوانید.

توجه داشته باشید که در هر دو مورد احتمالاً شما دارای یک mutex یا برخی از متغیرهای اتمی هستید تا اطمینان حاصل کنید که فقط یک موضوع در یک زمان تغییر می کند ، به عنوان مثال. ب) نشانگر / فهرست برای نوشتن یا نشانگر / فهرست برای خواندن.