PDA

View Full Version : نحوه استفاده ناظر یا مانیتور برای چند نخی در سی شارپ



amin1softco
شنبه 28 خرداد 1390, 21:24 عصر
بطور خیلی ساده راحتترین روش استفاده از ناظر (Monitor) در سی شارپ چیه؟!

r00tkit
شنبه 28 خرداد 1390, 21:58 عصر
فکر کنم اگه مفهوم مانیتور رو متوجه بشی دیگه همهش می شه راحت :
مانیتور مثل بقیهی شی ها همگام سازی یه ورود داره یه خروج
مثلا"


Monitor.Enter(m_inputQueue);
try
{
// When the lock is obtained, add an element.
m_inputQueue.Enqueue(qValue);
}
finally
{
// Ensure that the lock is released.
Monitor.Exit(m_inputQueue);
}


http://msdn.microsoft.com/en-us/library/de0542zz.aspx#Y491

amin1softco
شنبه 28 خرداد 1390, 22:08 عصر
مشکل من دقیقاً مفهومشه

r00tkit
شنبه 28 خرداد 1390, 22:27 عصر
It provides a mechanism that synchronizes access to objects.

The Monitor class controls access to objects by granting a lock for an object to a single thread. Object locks provide the ability to restrict access to a block of code, commonly called a critical section. While a thread owns the lock for an object, no other thread can acquire that lock. You can also use Monitor to ensure that no other thread is allowed to access a section of application code being executed by the lock owner, unless the other thread is executing the code using a different locked object.
به طور خیلی ساده دسترسی ها به یک تیکه کد رو در بین thread ها کنترول می کنه با گرفتن یک lock توسط یک thread دیگه thread دیگه ای نمی تونه به ان تیکه کد دست رسی داشته باشه تا زمانی که threadکه lock رو گرفته انو release کنه

استفاده از مانیتور دقیقا معادل استفاده از lock هستش و یک IL براش تولید می شه :



CLock.cs
object o = new object();
lock(o)
{
o=123;
}