همانطور که میدانیم در برنامه نویسی چند نخه 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;