سمافورها

خلاصه
1397/07/15

ایده اولیه و اصلی استفاده از سمافورها در سال 1965 توسط دایکسترا ارائه شد. این ایده مبتنی بر حل مشکل ایجاد شده در روش Sleep-Wakeup است

سمافورها


ایده اولیه و اصلی استفاده از سمافورها در سال 1965 توسط دایکسترا ارائه شد. این ایده مبتنی بر حل مشکل ایجاد شده در روش Sleep-Wakeup است که در طی آن از بین رفتن سیگنال های Wakeup باعث بروز بن بست در شرایط خاصی می شد.
سمافور چیزی جزء یک متغیر عددی که دو عمل خاص اتمیک بر روی آن تعریف شده است نمی باشد. از این متغیر عددی برای نگهداری تعداد سیگنال های Wakeup فرستاده شده استفاده می شود و اعمال اتمیک تعریف شده بر روی سمافورها به نوعی مانند sleep و Wakeup عمل می کنند.
سمافور دارای دو عمل زیر است:
1. Up
2. Down
عمل Down همان طور که گفته شد یک عمل اتمیک است که بسته به مقدار متغیر سمافور عملیات خاصی به شرح زیر انجام می دهد:
چنانچه متغیر سمافور دارای مقدار صفر بود عمل Down باعث می شود که فرآیندی که این عمل را صدا زده است به حالت sleep وارد شود و در صورتیکه مقدار متغیر سمافور غیر صفر بود، یکی از آن کم شود شبه کد مربوط به عمل Down را نشان می دهد.
عمل up: عمل up نیز به مانند Down یک عمل اتمیک و تجزیه ناپذیر است. هنگامی که فرآیندی عمل up را به کار می برد، چنانچه فرآیند دیگری بر روی این سمافور به دلیل انجام عمل Down، sleep نکرده باشد یکی به مقدار سمافور افزوده می شود و در غیر اینصورت سیگنال Wakeup برای سمافور ارسال می شود.