advertise laitec sharif univercity استخراج بیت کوین با کامپیوتر استخراج بیت کوین با کامپیوتر
دانلود پروژه معمای 8 با الگوریتم ژنتیک در سی شارپ

دانلود پروژه معمای 8 با الگوریتم ژنتیک در سی شارپ

3000 تومان
دانلود سورس هوش مصنوعی رنگ آمیزی گراف با ژنتیک در #C

دانلود سورس هوش مصنوعی رنگ آمیزی گراف با ژنتیک در #C

4800 تومان
دانلود مجموعه 100 سورس ساده و ابتدایی با سی پلاس پلاس

دانلود مجموعه 100 سورس ساده و ابتدایی با سی پلاس پلاس

5000 تومان
پکیج ویژه پروژه پایانی و پایان نامه رشته کامپیوتر

پکیج ویژه پروژه پایانی و پایان نامه رشته کامپیوتر

45000 تومان
دانلود سورس n وزیر با جست وجوی ممنوع در سی شارپ #C

دانلود سورس n وزیر با جست وجوی ممنوع در سی شارپ #C

3000 تومان

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

تولید بیت کوین با کامپیوتر

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

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