PDA

نسخه کامل مشاهده نسخه کامل : سوال درمورد Thread



SH@HIN
19-01-2013, 01:54
سلام دوستان
من دارم یه بازی رو ادیت میکنم که سورسش به زبان C++ هست ، الان برای انجام یه کاری نیاز به استفاده از قابلیت MultiThreading دارم، من از SDL برای این کار استفاده میکنم.
میخواستم بدونم وقتی که یک thread ایجاد میشه با دستور SDL_CreateThread بعد از اتمام کارش باید از بین بره یا نیازی نیست؟!

Open-Source
19-01-2013, 13:12
نه نیازی به این کار نیست.
وقتی thread یک تابعی رو اجرا میکنه، به محض اتمام کار تابع (return) ، کار thread هم تموم میشه.

- (البته این یه حالت نرمال هستش و توی POSIX threads این اتفاق میافته - در مورد SDL هم توی این صفحه ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) همین رو گفته).

SH@HIN
19-01-2013, 15:33
ممکنه که راجع به Mutex هم یکم توضیح بدین،و بگید که چه کاربردی داره؟!

Open-Source
19-01-2013, 15:58
توی مبحث MultiThreading یه نکته وجود داره، اونم استفاده همزمان چندتا thread از یه منبع مشترک هستش که اگه این موضوع مدیریت نشه، بطور حتم نتایج وخیمی در پی خواهد داشت.
کار mutex همینه؛ یعنی قابلیت استفاده از منابع مشترک بین thread ها رو برا ما فراهم میکنه. به این صورت که وقتی یه thread از یه منبعی استفاده میکنه اون منبع lock میشه و سایر thread ها نمیتونن ازش استفاده کنن تا زمانی که کار thread با منبع تموم بشه و اونو رها کنه.

SH@HIN
19-01-2013, 18:25
توی مبحث MultiThreading یه نکته وجود داره، اونم استفاده همزمان چندتا thread از یه منبع مشترک هستش که اگه این موضوع مدیریت نشه، بطور حتم نتایج وخیمی در پی خواهد داشت.
کار mutex همینه؛ یعنی قابلیت استفاده از منابع مشترک بین thread ها رو برا ما فراهم میکنه. به این صورت که وقتی یه thread از یه منبعی استفاده میکنه اون منبع lock میشه و سایر thread ها نمیتونن ازش استفاده کنن تا زمانی که کار thread با منبع تموم بشه و اونو رها کنه.

این قسمتی که گفتید "استفاده همزمان چندتا thread از یه منبع مشترک هستش" یعنی قابلیتی هم هست که مشخص کنیم thread ها از چند منبع استفاده کنند؟!
بعد منظورتون از منبع دقیقا چه قسمتی هایی هست؟! سیستم عامل یا منابع سخت افزاری؟!

Open-Source
19-01-2013, 22:36
منبع هر چیزی ممکنه باشه. متغییر، فایل، دیتابیس، پرت سخت افزاری و... .

به این فکر کن که چندتا thread همزمان باید در یه فایل بنویسند،‌ خوب در هر لحظه فقط باید یه thread این کار رو بکنه پس باید اونا رو مدیریت کنیم.

SH@HIN
19-01-2013, 22:51
منبع هر چیزی ممکنه باشه. متغییر، فایل، دیتابیس، پرت سخت افزاری و... .

به این فکر کن که چندتا thread همزمان باید در یه فایل بنویسند،‌ خوب در هر لحظه فقط باید یه thread این کار رو بکنه پس باید اونا رو مدیریت کنیم.

آهان!
من برداشتم غلط بود از منبع،فکر میکردم منظور منابع سخت افزاری هست که اجرای ترد ها رو کنترل میکنه !
ممنون:n11:

راستی بحث semaphore ها هم مربوط به multithreading میشه؟

Open-Source
20-01-2013, 10:06
اگه اشتباه نکنم، semaphore هم یه تکنیک برای مدیریت منابع اشتراکی بین پروسس هاست و بعضی سیستم عامل ها برای اجتناب از بن بست به جای mutex و سایر روش ها از semaphore استفاده میکنند. و فکر میکنم semaphore نسبت به mutex از انعطاف بیشتری برخوردار بود.
:n13: