رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش کلمه کلیدی lock
#1
کلاس Thread متدی به نام lock ندارد!!! C#‎‎‎ یک کلمه کلیدی دارد به نام lock.

مهمترین کار در مبحث چند نخی همگام سازی دسترسی به یک منبع مشترک است. مثلا اگر شما دو Thread داشته باشید که کار خواندن و نوشتن روی یک متغیر مشترک را انجام می دهند شما باید راهی را برای همگام سازی این عملیات پیدا کنید یعنی اینکه یک Thread نتواند این متغیر مشترک را بخواند یا بنویسد وقتی که Threadدیگر در حال نوشتن در این متغیر است.
اگر شما این کار رانکنید منجر به نتایج ناخواسته و غلط در برنامه شما میشود.

حالا ساده ترین راه برای همگام سازی Thread ها استفاده از کلمه کلیدی lock در C#‎‎‎ است.

از lock موقعی باید استفاده کنید که قسمتی از کد شما باید به صورت atomic توسط یک Thread اجرا شود. در این حال Thread های دیگه حق ورود به ناحیه ای که با lock مشخص شده باشد را ندارند در صورتی که یک Thread قبلا وارد این ناحیه شده است و هنوز داخل آن است.

lock یک آبجکت غیر null را می گیرد ( دقت کنید که object شما نباید null باشد و همینطور object شما باید RefrenceType باشد نه ValueType) . این object باید توسط تمامی Thread ها قابل دسترس باشد. معمولا یکی از فیلد های داخل کلاس را
برای این کار در نظر میگیرند. نوع این object مهم نیست برای همین معمولا از نوع System.Object استفاده می کنند.

مثال : دو Thread داریم یک کار مشترک را انجام می دهند و یک متغیر مشترک به نام counter هم دارند :
کد پی‌اچ‌پی:
Thread t1 = new Thread(Job);
Thread t2 = new Thread(Job);

t1.Start();
t2.Start();


// این همان object برای lock است.
Object obj = new Object();

// این مثلا همان منبع مشترک ما بین این دو نخ است
int counter=0;

// این متد را هر دو نخ با هم همزمان انجام می دهند.پس باید از لاک برای خواندن و
// و نوشتن متغیر مشترک بین آنها استفاده کرد.
public void Job()
}
// شروع متد Job

// یکسری کار

lock(obj)
{
// نوشتن متغیر مشترک
counter++;
}

//یکسری کار

lock(obj)
{
// خواندن متغیر مشترک
counter;
}

// یکسری کار

// پایان متد Job


منبع :برنامه نویس
[عکس: <a href=www.Mojsazan.com.gif]" class="mycode_img" />
پاسخ
سپاس شده توسط


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش مقدماتی Thread برای مبتدیان - قسمت اول مهرداد عباسی 0 4,572 12-16-2009, 01:12 AM
آخرین ارسال: مهرداد عباسی

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان