انجمن گروه موج سازان
سمافورها در C#‎ - نسخه قابل چاپ

+- انجمن گروه موج سازان (http://www.mojsazan.com/forum)
+-- انجمن: برنامه نویسی تخصصی (http://www.mojsazan.com/forum/forumdisplay.php?fid=31)
+--- انجمن: threading programming (http://www.mojsazan.com/forum/forumdisplay.php?fid=45)
+--- موضوع: سمافورها در C#‎ (/showthread.php?tid=122)



سمافورها در C#‎ - مهرداد عباسی - 12-16-2009

شما باید با مباحث MultiThreading در C#‎ خوب آشنا باشید
کلاسی داریم در .Net به نام Semaphore در فضای نامی System.Threading. شما در این کلاس می توانید تعیین کنید که چند تا Thread همزمان می توانند وارد ناحیه بحرانی شوند.
مثلا اگر بخواهید بگید که همزمان 3 نخ (Thread) می توانند وارد ناحیه بحرانی شوند باید از کد زیر استفاده کنید :

کد پی‌اچ‌پی:
Semaphore s=new Semaphore(3,3); 

معنی پارامتر دوم سازنده این است که ماکزیمم 3 نخ همزمان می توانند وارد ناحیه بحرانی شما شوند و معنی پارامتر اول این است که مقدار فعلی شمارنده Semaphor سه است یعنی هنوز نخی وارد ناحیه بحرانی نشده است.هر وقت که نخی وارد ناحیه بحرانی شود شما باید از متد WaitOne استفاده کنید که این متد از مقدار فعلی شمارنده یکی کم می کند یعنی می شود 2.هر بار که شما از WaitOne استفاده کنید یکی از شمارنده شما کم می شود تا زمانی که شمارنده شما صفر شود. اگر صفر شود Semaphore اجازه نمیدهد که هیچ نخی وارد ناحیه بحرانی شود و تمامی نخ ها را بلاک می کند و اجازه دسترسی نمی دهد. همچنین اگر نخی کارش با ناحیه بحرانی به پایان رسید شما باید از متد Release کلاس Semaphore استفاده کنید که باعث می شود به شمارنده شما یکی اضافه شود.


منبع :برنامه نویس