1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

آموزش ناحیه بحرانی ::Critical Section

شروع موضوع توسط hector2141 ‏11/9/12 در انجمن Delphi

  1. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    همانطور که میدانیم در برنامه نویسی چند نخه Multi Threading هر نخ در هر زمانی میتواند در حال اجرا باشد و در هر ناحیه ای از اجرای خوذ باشد.
    مثلا فکر کنید یک نخ نوشته اید که یک عکس را سیاه و سفید کند. حال می خواهیم از این نخ چند نمونه ایجاد کنیم یا یک عکس بزرگ را سریع تر سیاه سفید کند. به کد زیر دقت کنید :
    Procedure BandW(a,b,c)
    begin
    do black and white
    write on image canvas
    end;
    زمانی که هر نخ می خواهد در canvas بنویسد می تواند در هر زمانی از اجرای خود به این نقطه برسد در حالیکه فقط در یک زمان باید یک نخ بتواند در Canvas بنویسد !!!
    خلاصه برای اینکه قاطی پاطی نشه از یک سیستم به نام Monitor یا سمافورها و ... استفاده می کنیم تا دیگر نخ ها قبل از ورود به ناحیه بحرانی از حضور دیگر نخ ها در این ناحیه آگاه شوند و اگر نخ دیگری در این ناحیه بود Suspend شوند.
    مثل یک جور پل باریک می مونه که فقط یک ماشین می تونه روش باشه !!!
    کد زیر درست شده :
    Procedure BandW(a,b,c)
    begin
    do black and white
    Monitor.Enter ();
    /*Enter Critical Section */
    write on image canvas
    /*Exit critical Section*/
    Monitor.leave ();
    end;