# Native Code > برنامه نویسی در Delphi > مقالات مرتبط با Delphi/Win32 >  آموزش ناحیه بحرانی ::Critical Section

## Farhad_Mohammadi

باسلام.
به درخواست یکی از دوستان می خواهم یک آموزش کوچکی راجع به نواحی بحرانی و استفاده آن در برنامه نویسی بدهم. 
همانطور که میدانیم در برنامه نویسی چند نخه 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;

----------


## zman123456

سلام
اگه میشه لطفا در مورد این نوع برنامه نویسی از ابتدا یک توضیحی بدهید ممنون میشم

----------


## Farhad_Mohammadi

این نوع برنامه نویسی یا استفاده از سمافورها و مانیتورها یک مشکل قدیمی در سیستم عامل ها و مراجع آن است. برای داشتن اطلاعات بیشتر راجع به این میتواند کتاب سیلبرشاتس را در مورد طراحی سیستم های عامل بررسی کنید چون مبحث مربوط به ناحیه بحرانی یک بحث طولانی و گسترده ای است. یکسری از مسائلی که روی این داستان مطرح شده و حل شده است : 1 - مسئله غذا خوردن فیلسوفان 2 - مسئله سیگاریها 3 - مسئله آرایشگر منصف 4 - مسئله پل و ...

----------

