Semaphore vs Monitor
Semaphore یک ساختار داده ای است که برای اطمینان از عدم دسترسی همزمان چندین فرآیند به یک منبع مشترک یا یک بخش مهم در محیط های برنامه نویسی موازی استفاده می شود. سمافورها برای جلوگیری از قفل های مرده و شرایط مسابقه استفاده می شوند. Monitor یک ساختار زبان برنامه نویسی است که همچنین برای جلوگیری از دسترسی همزمان چندین فرآیند به یک منبع مشترک استفاده می شود، بنابراین طرد متقابل را تضمین می کند. مانیتورها از متغیرهای شرطی برای رسیدن به این کار استفاده می کنند.
سمافور چیست؟
Semaphore یک ساختار داده ای است که برای ارائه حذف متقابل برای بخش های مهم استفاده می شود.سمافورها عمدتاً از دو عملیات به نامهای انتظار (که از لحاظ تاریخی به عنوان P شناخته میشوند) و سیگنال (از لحاظ تاریخی به عنوان V) پشتیبانی میکنند. عملیات انتظار یک فرآیند را تا زمانی که سمافور باز شود مسدود می کند و عملیات سیگنال اجازه می دهد تا فرآیند دیگری (رشته) وارد شود. هر سمافور با صفی از فرآیندهای انتظار همراه است. هنگامی که عملیات انتظار توسط یک نخ فراخوانی می شود، اگر سمافور باز باشد، نخ می تواند ادامه یابد. اگر سمافور هنگام فراخوانی عملیات انتظار توسط یک نخ بسته شود، نخ مسدود شده و باید در صف منتظر بماند. عملیات سیگنال یک سمافور را باز می کند و اگر نخی از قبل در صف منتظر باشد، به آن فرآیند اجازه داده می شود تا ادامه یابد و اگر هیچ رشته ای در صف منتظر نباشد، سیگنال برای رشته های بعدی به خاطر سپرده می شود. دو نوع سمافور به نام سمافورهای موتکس و سمافورهای شمارشی وجود دارد. سمافورهای Mutex به یک منبع اجازه دسترسی واحد را می دهند و سمافورهای شمارش به چندین رشته اجازه دسترسی به یک منبع (که چندین واحد در دسترس دارد) را می دهد.
مانیتور چیست؟
نمایشگر یک ساختار زبان برنامه نویسی است که برای کنترل دسترسی به داده های مشترک استفاده می شود. مانیتورها ساختارهای داده مشترک، رویهها (که بر روی ساختارهای داده مشترک عمل میکنند) و همگامسازی بین فراخوانیهای رویه همزمان را کپسوله میکنند. یک مانیتور مطمئن میشود که دادههایش با دسترسیهای بدون ساختار مواجه نمیشوند و تضمین میکند که آجها (که از طریق رویههای آن به دادههای مانیتور دسترسی دارند) به شیوهای قانونی با هم تعامل دارند. یک مانیتور با اجازه دادن به تنها یک رشته برای اجرای هر رویه مانیتور در یک زمان معین، محرومیت متقابل را تضمین می کند. اگر thread دیگری سعی کند متدی را در مانیتور فراخوانی کند، در حالی که یک رشته از قبل رویه ای را در مانیتور اجرا می کند، رویه دوم مسدود شده و باید در صف منتظر بماند. دو نوع مانیتور به نام های مانیتور Hoare و مانیتور Mesa وجود دارد. آنها عمدتاً در معناشناسی زمانبندی متفاوت هستند.
تفاوت بین سمافور و مانیتور چیست؟
حتی اگر هم سمافورها و هم مانیتورها برای دستیابی به حذف متقابل در محیطهای برنامهنویسی موازی استفاده میشوند، اما در تکنیکهای مورد استفاده برای دستیابی به این وظیفه متفاوت هستند. در مانیتورها، کدی که برای دستیابی به طرد متقابل استفاده میشود، در یک مکان واحد است و ساختارمندتر است، در حالی که کدهای سمافورها بهعنوان فراخوانی تابع انتظار و سیگنال توزیع میشوند. همچنین هنگام پیاده سازی سمافورها اشتباه کردن بسیار آسان است، در حالی که در اجرای نمایشگرها احتمال اشتباه بسیار کم است. علاوه بر این، مانیتورها از متغیرهای شرط استفاده میکنند، در حالی که سمافورها این کار را نمیکنند.