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

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

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

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

3000 تومان
دانلود پروژه آموزش چندرسانه ای با دایرکتور Director

دانلود پروژه آموزش چندرسانه ای با دایرکتور Director

3000 تومان
دانلود سورس پروژه فروشگاه کیف با asp.net و sql express

دانلود سورس پروژه فروشگاه کیف با asp.net و sql express

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

دانلود مجموعه 70 پروژه مفید و کاربردی سی شارپ #C

9500 تومان

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

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

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

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