PDA

View Full Version : کریتیکال سکشن چیست ؟



sajioo
پنج شنبه 29 آبان 1393, 07:59 صبح
سلام دوستان کریتیکال سکشن چیست و اگه میشه چند نمونه مثال و کد برای بنده بگید تا بیشتر آشنا بشم.
برای مثال من از indytcpserver استفاده میکنم. و باید در هر بار Executeکردن از آرایه سراسری ip استفاده کنم و با حلقه اون آرایه رو پیمایش کنم . چطور میتونم از کریتیکال سکشن استفاده کنم و کاربرد آن برای من چیست؟
متنی که در ویکی پدیا پیدا کردم


In concurrent programming (http://en.wikipedia.org/wiki/Concurrent_programming), a critical section is a piece of code (http://en.wikipedia.org/wiki/Code) that accesses a shared resource (data structure or device) that must not be concurrently accessed by more than one thread of execution (http://en.wikipedia.org/wiki/Thread_(computer_science)).[1] (http://en.wikipedia.org/wiki/Critical_section#cite_note-1) A critical section will usually terminate in fixed time, and a thread, task, or process will have to wait for a fixed time to enter it (aka bounded waiting). Some synchronization (http://en.wikipedia.org/wiki/Synchronization_(computer_science)) mechanism is required at the entry and exit of the critical section to ensure exclusive use, for example a semaphore (http://en.wikipedia.org/wiki/Semaphore_(programming)).



عنوان تایپیک اشتباست .ادمین عزیز تغییرش بده لطفا

BORHAN TEC
پنج شنبه 29 آبان 1393, 14:22 عصر
با سلام،
در برخی موارد ممکنه که بخواهید در برنامه های مبتنی بر ترد یک شی یا یک متغیر به صورت امن استفاده کنید و یا اون رو تغییر بدید، به طوری که در لحظه فقط در اختیار یک ترد باشه و نتونه به صورت همزمان یا زمانی که خودمون اجازه بدیم در اختیار ترد دیگه ای قرار بگیره. برای این منظور از Critical Section استفاده می کنیم. این هم یک مثال ساده که نحوه کار رو توضیح میده:
//global variables
var
CriticalSection: TRTLCriticalSection;
a, b: integer;


//before the threads starts
InitializeCriticalSection(CriticalSection);


//in the thread
EnterCriticalSection(CriticalSection);
//From now on, you can safely make
//changes to the variables.
inc(a);
inc(b);
//End of safe block
LeaveCriticalSection(CriticalSection);

برای توضیحات بیشتر هم مقاله ای که ضمیمه کرده ام رو ببینید.

نکته: کلاسها و نوع های بالا فقط در ویندوز قابل استفاده هستند و در برنامه های چند سکویی روش کار متفاوت خواهد بود. در این صورت باید به جای TRTLCriticalSection از TCriticalSection استفاده کنید.
موفق باشید...

Mask
پنج شنبه 29 آبان 1393, 14:44 عصر
بد نیست یه مقدار جستجو کنید و بعد پست بزنید .اقا شاهین زحمت جواب دادن رو کشیدند . کافیه کلمه critical section رو در جستجو سایت انجام میدادید. تا متوجه بشید به کرات در این مورد بحث و نمونه گزاشته شده.
در این لینک من به طور واضح توضیح و نمونه قرار داده ام، میتونید استفاده کنید. (http://barnamenevis.org/showthread.php?441121-critical-section&highlight=critical+section%2B%D8%AF%D9%84%D9%81%DB %8C)