advertise laitec sharif univercity
سیستم اتوماسیون دهیاری ، پروژه مهندسی نرم افزار

سیستم اتوماسیون دهیاری ، پروژه مهندسی نرم افزار

5000 تومان
دانلود پروژه مهندسی نرم افزار ، نمایندگی ایران خودرو

دانلود پروژه مهندسی نرم افزار ، نمایندگی ایران خودرو

5000 تومان
دانلود سورس پروژه سی شارپ شبیه سازی صف بانک تحت شبکه

دانلود سورس پروژه سی شارپ شبیه سازی صف بانک تحت شبکه

5000 تومان
دانلود PDF مجموعه 300 نکته جالب برنامه نویسی در سی شارپ #C

دانلود PDF مجموعه 300 نکته جالب برنامه نویسی در سی شارپ #C

5000 تومان
پروژه پایانی PHP وب سایت فروشگاه کامپیوتری

پروژه پایانی PHP وب سایت فروشگاه کامپیوتری

29000 تومان

چندنخی در زبان سی شارپ #C

زبان Ada و کتابخانه NET. عملیات های پایه همزمانی را برای برنامه نویسان کاربردی فراهم کردند که هر نخ بخشی از برنامه را تشکیل میدهد که میتواند با نخ های دیگر به طور همزمان اجرا شود. این قابلیت را چندنخی مینامند.
چندنخی در زبان سی شارپ #C

چندنخی در زبان سی شارپ #C

اگر نگاهی به فعالیت های بدن انسان داشته باشیم، میبینیم که چندین فعالیت به طور موازی انجام میشوند که این عمل را همزمانی می نامیم. به همین ترتیب کامپیوترها نیز میتوانند عملیات هایی را بطور همزمان انجام دهند. تمام زبانهای برنامه نویسی به برنامه نویس اجازه نمیدهند فعالیت های همزمان را مشخص نمایند، بلکه زبانهای برنامه سازی فقط مجموعه ای ساده از ساختارهای کنترلی را فراهم میکنند که برنامه نویس با استفاده از آنها میتوانند فعالیتها را به ترتیب انجام دهند. یعنی یک فعالیت را شروع کنند و پس از اتمام آن عملیات دیگری را آغاز نمایند. نوع همزمانی که امروزه در کامپیوترها انجام میگیرد، بعنوان "عملیات های پایه" سیستم عامل پیاده سازی شدند که برنامه نویسان حرفه ای آنها را مینوشتند.

زبان Ada و کتابخانه .NET عملیات های پایه همزمانی را برای برنامه نویسان کاربردی فراهم کردند. برنامه نویسان مشخص میکنند که کاربردها شامل "نخ هایی از اجرا" باشند و هر نخ بخشی از برنامه را تشکیل میدهد که میتواند با نخ های دیگر به طور همزمان اجرا شود. این قابلیت را چندنخی مینامند. چندنخی در تمام زبانهای .NET مثل C# ، ویژوال بیسیک و ویژوال C++ وجود دارد. کتابخانه کلاس .NET قابلیت های چندنخی را در فضای نام System.Threading ارائه میکند.

چندنخی

نوشتن برنامه های چندنخی دشوار است، گرچه مغز انسان میتواند کارها را بطور همزمان انجام دهد، ولی تعویض بین کارهای موازی دشوار است. دو نوع چند وظیفه ای وجود دارد:

 مبتنی بر فرآیند (process)

► مبتنی بر نخ (thread)

پی بردن به تفاوت این دو مهم است. فرآیند برنامه ای است که در حال اجراست. چند وظیفه ای مبتنی بر فرآیند، خاصیتی است که به کامپیوتر اجازه میدهد دو یا چند برنامه بطور همزمان اجرا شوند و در آن، برنامه کوچکترین واحد کد است که میتواند توسط زمانبند توزیع شود.

نخ، واحد قابل توزیعی از کد است. در محیط چند وظیفه ای مبتنی بر نخ،  تمام فرآیندها حداقل یک نخ دارند. ولی میتوانند چند نخ داشته باشند. یعنی یک برنامه بطور همزمان میتواند دو یا چند کار را انجام دهد. بنابراین میتوان گفت، چند وظیفه ای مبتنی بر فرآیند اجرای همزمان برنامه ها را اداره میکند در حالیکه چند وظیفه ای مبتنی بر نخ، با اجرای همزمان تکه هایی از یک برنامه سروکار دارد.

امتیاز اصلی چندنخی این است که میتوان از اوقات بیکاری که در اغلب برنامه ها وجود دارد، بطور کارآمد استفاده کرد.

حالتهای نخ

نخ میتواند در چندین حالت قرار داشته باشد. نخ میتواند در حال اجرا باشد. میتواند آماده اجرا باشد که CPU در اختیارش قرار خواهد گرفت. نخ میتواند مسدود شود و منتظر منبعی بماند. نخ در حال اجرا میتواند به تعویق افتد، و سپس از سر گرفته شود. نخ میتواند خاتمه یابد و نخ خاتمه یافته نمیتواند از سر گرفته شود.

محیط کاری .NET دو نوع نخ را تعریف میکند :

► نخ پیش زمینه foreground))

► نخ پس زمینه (background)

وقتی نخی ایجاد میشود بطور پیش فرض بعنوان نخ پیش زمینه محسوب خواهد شد، ولی میتوان آن را به نخ پس زمینه تبدیل کرد. تنها تفاوت این دو نخ این است که وقتی تمام نخ های پیش زمینه موجود فرآیند خاتمه یابند، بخ پس زمینه نیز خاتمه می یابد.

تمام فرآیندهاحداقل یک نخ از اجرا دارند که نخ اصلی نامیده میشود. زیرا این فرآیند با شروع برنامه اجرا خواهد شد. بقیه نخ ها را میتوان از نخ اصلی ایجاد کرد. در C# از چند وظیفه مبتنی بر فرآیند و مبتنی بر نخ پشتیبانی میشود، در نتیجه با استفاده از C# میتوان فرآیندها و نخ ها را ایجاد و مدیریت کرد .

 

 ایجاد نخ

برای ایجاد نخ از سازنده کلاس Thread استفاده میشود. این سازنده delegate های ThreadStart یا ParameterizedThreadStart را بعنوان پارامتر میگیرد و. این delegate ها متدی را مشخص میکنند که نخ باید با فراخوانی متد Start اجرا نماید. اگر متد Start بیش از یکبار فراخوانی شود استثنای ThreadStateExceptin رخ خواهد داد. متد Start فورا قبل از شروع واقعی نخ، خاتمه می یابد. با استفاده از خواص ThreadState و IsAlie میتوان حالت هر نخ را در هر زمان تعیین کرد ولی این خاصیتها نباید برای همگام سازی فعالیت های نخ به کار روند.

 

همگام سازی نخ ها در #C

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

برای حل این مشکل نخ ها باید به کد دستکاری کننده ی داده های مشترک دستیابی انحصاری داشته باشند. یعنی در حالیکه نخی داده ی مشترک را اصلاح میکند هیچ نخ دیگری اجازه نداشته باشد به آن داده ها دستیابی داشته باشد. بنابراین در این اثنا نخ های دیگر باید منتظر بمانند. وقتی نخی با دستیابی انحصاری به داده مشترک کارش را تمام کرد، یکی از نخ های در حال انتظار میتواند به آن داده ها دستیابی داشته باشد. در این روش نخی که به داده های مشترک دستیابی دارد، مانع از این میشود که نخ های دیگر همزمان به آن داده ها دستیابی داشته باشند. این وضعیت را انحصار متقابل یا همگام سازی نخ ها می نامند.

C# با استفاده از کلاس Monitor همگام سازی نخ ها را انجام میدهد. کلاس Monitor متدهایی را برای قفل کردن اشیا فراهم میکند تا دستیابی همگام به داده مشترک را پیاده سازی نماید. قفل کردن شیء به این معناست که در هر زمان فقط یک نخ میتواند به آن شیء دستیابی داشته باشد. وقتی نخی بخواهد دستیابی انحصاری به شی ءای داشته باشد متد Enter مربوط به کلاس Monitor را فراخوانی میکند تا آن شی را قفل کند. هر شی دارای یک SyncBlock است که وضعیت قفل آن شی را نگهداری میکند. وقتی نخ بر روی شی ای قفل ایجاد کرد میتواند داده های آن شی را دستکاری کند و سایر نخ ها مسدود میشوند. وقتی نخ بخواهد قفل را باز کند متد Exit مربوط به کلاس Monitor را فراخوانی میکند. این متد SyncBlock مربوط به شی داده مشترک را به هنگام میکند تا نشان دهد که آن شی قفل شده نیست. 

 

 



1
نظرات
  • user avatar مهدی:
    ۱۷:۵۶:۵۱ __ ۱۳۹۶/۰۳/۰۵

    سلام خیلی کلی بود مخصوصا مقایسه foreground , backgroundولی باز دمتون گرم

نظر خود را ارسال کنید



نام:
ایمیل:
دیدگاه:
captcha
کد امنیتی :


advertise
چندنخی در برنامه نویسیچندنخی در زبان سی شارپ چگونه است؟ایجاد نخ thread در #Cنخ پس زمینه background سی شارپمبتنی بر نخ (thread) در سی شارپمبتنی بر فرآیند (process) در سی شارپانحصار متقابل یا همگام سازی نخ ها در سی شارپچندنخی در زبان سی شارپ چیست؟#what is multithreading in Cآشنایی با multithreading در #Cنخ پیش زمینه foreground سی شارپآموزش چندنخی در زبان برنامه نویسی سی شارپ لیست برچسب ها
تمامی حقوق این سایت اعم از محتوی ، تصاویر ، قالب و ... متعلق به گروه مهندسی وب سایت سورس کد می باشد.
SourceCodes.ir ، افقی روشن برای برنامه نویسان ، از مبتدی تا حرفه ای

پیشنهادات ویژه سورس کد

پکیج ویژه پروژه پایانی رشته کامپیوتر دانلود مجموعه 70 پروژه کاربردی سی شارپ وب سایت فروشگاه با php