در علوم کامپیوتر (Computer Science)، سمافور یک متغیر (Variable) است که دسترسی به یک یا چند منبع را کنترل میکند. این ابزاری است توسعه دهنده (Developer) برای اطمینان از اینکه تابع (Function) فقط به داده های معتبر دسترسی دارد و در زمان مناسب اجرا می شود. سمافور میتواند از بن بست (Deadlock) یا شرایط مسابقه (Race Condition) جلوگیری کند و دسترسی به منبعی را در زمانی که در دسترس نیست ممنوع کند.
دو نوع اصلی از سمافورها در برنامهنویسی کامپیوتری وجود دارد: باینری و شمارش.
یک سمافور باینری یک متغیر بولی (Boolean) است که میتواند تنها دو مقدار ممکن (0 یا 1) داشته باشد. اغلب به عنوان قفل برای محدود کردن دسترسی به یک تابع یا منبع استفاده می شود. به عنوان مثال، سمافور A تابع getData() را کنترل می کند. اگر A = 0 باشد، getData() اجرا نمی شود. اگر A = 1، getData() اجرا خواهد شد. سمافور باینری نیز به عنوان پرچم یا سوئیچ در نظر گرفته میشود که روشن یا خاموش است.
یک سمافور شمارشکننده میتواند هر غیرمنفی باشد عدد صحیح (Integer) ، همچنین به عنوان عدد کامل (Whole Number) شناخته می شود. مقدار آن ممکن است بر اساس نتایج یک یا چند تابع افزایش یا کاهش یابد. به عنوان مثال، یک سمافور شمارش ممکن است تعداد منابع موجود در یک مخزن منابع را پیگیری کند. اگر سمافور بیشتر از افزایش آن کاهش یابد، در نهایت به 0 خواهد رسید. یک مقدار صفر نشان می دهد که هیچ منبع دیگری باقی نمانده است.
توجه: "سمافور" در دنیای واقعی پرچم یا شی دیگری است که استفاده می شود. برای سیگنال دادن از راه دور برای مثال، شخصی ممکن است یک تیرک را از اسکله بگیرد تا به کاپیتان کشتی علامت دهد که میخواهد سوار شود.
تعریف سمافور (Semaphore) در این صفحه یک تعریف پایه نگاشته شده توسط تک بورد است. اگر مایل به ارجاع به این صفحه یا استناد به این تعریف هستید، با شرط درج لینک به این صفحه می توانید از این محتوا استفاده کنید.
هدف تک بورد توضیح اصطلاحات کامپیوتری به روشی است که به راحتی قابل درک باشد. ما برای سادگی و دقت با هر تعریفی که منتشر می کنیم تلاش می کنیم. اگر بازخوردی درباره تعریف سمافور (Semaphore) دارید یا میخواهید یک اصطلاح فنی جدید پیشنهاد کنید، لطفاً با ما تماس بگیرید.
آیا می خواهید اصطلاحات فنی بیشتری یاد بگیرید؟ در خبرنامه روزانه یا هفتگی مشترک شوید و شرایط و آزمون های ویژه را در ایمیل خود تحویل بگیرید.