آشنایی با Semaphore در جاوا – راهنمای جامع

۳۷۷ بازدید
آخرین به‌روزرسانی: ۵ شهریور ۱۴۰۲
زمان مطالعه: ۳ دقیقه
دانلود PDF مقاله
آشنایی با Semaphore در جاوا – راهنمای جامعآشنایی با Semaphore در جاوا – راهنمای جامع

در این راهنمای کوتاه از سری مقالات آموزش جامع جاوا، به بررسی مبانی Semaphore در جاوا و همچنین mutex-ها می‌پردازیم.

997696

Semaphore چیست؟

توضیح خود را از java.util.concurrent.Semaphore آغاز می‌کنیم. از Semaphore می‌توان برای محدودسازی تعداد نخ‌هایی که به صورت هم‌زمان به یک منبع خاص دسترسی می‌یابند استفاده کرد.

در مثال زیر، یک صف لاگین ساده برای محدود کردن تعداد کاربران در سیستم پیاده‌سازی می‌کنیم:

به روش استفاده از متدهای زیر توجه کنید:

  • ()tryAcquire – این متد در صورتی که یک مجوز، بی‌درنگ موجود باشد، مقدار true بازگشت داده و آن را در اختیار می‌گیرد، در غیر این صورت مقدار false بازگشت می‌دهد، اما ()acquire نیازمند یک مجوز است و تا زمانی که چنین مجوزی موجود شود، مسدود می‌شود.
  • ()release – یک مجوز را آزاد می‌کند.
  • ()availablePermits – این متد تعداد مجوزهایی که هم اینک موجود است را بازگشت می‌دهد.

برای تست صف لاگین، ابتدا باید به محدودیت برسیم و بررسی کنیم آیا تلاش لاگین بعدی مسدود خواهد شد یا نه:

سپس بررسی می‌کنیم آیا هیچ اسلاتی پس از لاگ‌آوت موجود است یا نه:

Semaphore زمان‌دار

در این بخش به بررسی Apache Commons TimedSemaphore می‌پردازیم. TimedSemaphore به ما امکان می‌دهد که مانند Semaphore ساده چندین مجوز داشته باشیم، اما این مجوزها صرفاً در یک دوره زمانی مفروض موجود هستند و پس از طی شدن این دوره، زمان ریست می‌شود و همه مجوزها آزاد می‌شوند.

از TimedSemaphore می‌توان برای ساختن یک صف با تأخیر مانند زیر استفاده کرد:

زمانی که از یک صف با تأخیر که دارای دوره زمانی یک ثانیه‌ای است، استفاده می‌کنیم، پس از مصرف همه اسلات‌های موجود درون آن یک ثانیه، نباید چیزی موجود باشد:

اما پس از خوابیدن به مدت یک ثانیه، semaphore ریست شده و مجوزها را آزاد می‌کند:

Semaphore در برابر Mutex

Mutex مشابه یک semaphore دودویی عمل می‌کند، ما می‌توانیم از آن برای پیاده‌سازی «انحصار متقابل» (Mutual Exclusion) استفاده کنیم. در مثال زیر، از یک semaphore ساده دودویی برای ساخت یک شمارنده استفاده کرده‌ایم:

زمانی که تعداد زیادی نخ به صورت یک‌باره برای دسترسی به یک شمارنده تلاش کنند، در یک صف مسدود می‌شوند:

زمانی که صبر کنیم، همه نخ‌ها به شمارنده دسترسی می‌یابند و هیچ نخی در صف باقی نمی‌ماند:

سخن پایانی

در این مقاله به بررسی مبانی مقدماتی semaphore در جاوا پرداختیم. کد همه موارد مطرح‌شده در این مقاله را می‌توانید در این ریپوزیتوری گیت‌هاب (+) ‌ببینید.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۰ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
baeldung
دانلود PDF مقاله
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *