تالار گفتمان مانشت
تعداد فرآیندها و نخ های ایجاد شده چندتاست؟ - نسخه‌ی قابل چاپ

تعداد فرآیندها و نخ های ایجاد شده چندتاست؟ - LEA3C - 27 آذر ۱۳۹۴ ۰۷:۳۸ ب.ظ

امیدوارم کسی این رو بلد باشه و جواب بده. خیلی رو مخم رفته اصلا نمی تونم درکش کنم

RE: تعداد فرآیندها و نخ های ایجاد شده چندتاست؟ - LEA3C - 29 آذر ۱۳۹۴ ۰۱:۱۲ ق.ظ

واقعا کسی اینو بلد نیست؟

RE: تعداد فرآیندها و نخ های ایجاد شده چندتاست؟ - yayarety - 29 آذر ۱۳۹۴ ۰۷:۲۸ ب.ظ

(۲۹ آذر ۱۳۹۴ ۰۱:۱۲ ق.ظ)LEA3C نوشته شده توسط:  واقعا کسی اینو بلد نیست؟

سلام دوست عزیز،

حتما خودتون می دونین که نوشتن if بخاطر اینه که برنامه بفهمه آیا پدر هست یا فرزند، چون در ابتدا کد پدر و فرزند یکسان هست تا جایی که دستور exec اجرا بشه (که در کد صورت سوال به اینجا هنوز نرسیده، پس کدهای پدر و فرزندها روی هم منطبق اند).
فرزند، id خودش رو صفر می بینه، البته واقعا id اش صفر نیست، پدرش می تونه مقدار واقعی id فرزندش رو ببینه.
این صفر دیدن id توسط فرزند یعنی سیستم عامل بهش می فهمونه که بچه ای، ریز می بینمت :-)
اینجا شش فرایند، البته با شمردن خود فرایند پدر و نیز دو تا نخ تولید میشه
که توی شکل ضمیمه براتون روند انجام کار رو نوشتم

ضمنا راه حل به اصطلاح تستی و سریعش هم اینه:
به تعداد دو برابر fork ها ، فرایند داریم (با احتساب فرایند پدر اولیه) چون هر fork موجب دو تا شدن میشه

همینطور چون create_thread فقط تحت تاثیر یه fork (که داخل if) هست قرار می گیره،
پس تعداد نخهای تولیدی هم دو تا هست.

RE: تعداد فرآیندها و نخ های ایجاد شده چندتاست؟ - LEA3C - 29 آذر ۱۳۹۴ ۰۸:۰۴ ب.ظ

واقعا ممنونم راهنمایی خیلی خوبی بود

مشکل اصلیم این بود که فرزندها رو از اول کد براشون اجرا می کردم در حالی باید از خط بعد از fork که ایجاد میشه اون فرزند ادامه بده

در پیوست یه نمونه دیگه رو آوردم

RE: تعداد فرآیندها و نخ های ایجاد شده چندتاست؟ - yayarety - 29 آذر ۱۳۹۴ ۰۸:۱۱ ب.ظ

(۲۹ آذر ۱۳۹۴ ۰۸:۰۴ ب.ظ)LEA3C نوشته شده توسط:  واقعا ممنونم راهنمایی خیلی خوبی بود

مشکل اصلیم این بود که فرزندها رو از اول کد براشون اجرا می کردم در حالی باید از خط بعد از fork که ایجاد میشه اون فرزند ادامه بده

در پیوست یه نمونه دیگه رو آوردم
بسیار خوب، خوشحالم که تونستم کمکی داشته باشم
مثال شما هم خیلی عالی بود