تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 4 از 4

نام تاپيک: چند مساله مبهم در تردینگ

  1. #1
    آخر فروم باز
    تاريخ عضويت
    Jul 2009
    پست ها
    6,351

    پيش فرض چند مساله مبهم در تردینگ

    با سلام
    با عرض پوزش از سوال های پی در پی !


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    1-در کلاس بالا ما اگر به همین شکل F5 را بزنیم. Console.WriteLine("Thread one returned"); ابتدا عمل میکند . سپس print 1 تا 6 و بعد منتظر می ماند تا یک کلید از ما دریافت کند.

    2-حال اگر Console.WriteLine("Thread one returned"); را از برنامه حذف کنیم. دیگر print1 تا 6 ابتدا چاپ نمیشه و منتظر میمونه من کلید بهش بدم بعد چاپ رو شروع.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    بعنی چاپ کردن دقیقا عکس بالا.


    حالا در همین حالت 2 اگر ما ctrl+F5 بزنیم اون وقت دیگر اول print 1 اتا 6 عمل میکنید سپس کلید را درخواست می کند.!

    4-اگر ما متد join را فعال کنیم . ترتیب رعایت میشود.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  2. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    مورد 1 و 2 و 3 را در رایانه خودم اجرا کردم و تفاوتی در ترتیب خروجی رخ نداد!
    ولی مورد 4 نیاز به آزمایش ندارد و کاملاً منطقی است.
    دستور Join ریسمان جاری را بلاک میکند و منتظر میماند تا ریسمان ساخته شده کارش پایان یابد.

    ولی در کل پیشنهاد میکنم برای تحقیق و بررسی چند ریسمانی اصلاً از Console.ReadXXX استفاده نکنید.
    اگر میخواهید تقدم و تاخرها را چک کنید از همان Console.WriteLine استفاده کنید و ترتیب چاپ عبارت ها را مشاهده و تحقیق و بررسی کنید.

    موفق باشید.

  3. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  4. #3
    آخر فروم باز
    تاريخ عضويت
    Jul 2009
    پست ها
    6,351

    پيش فرض

    سلام
    مورد 1 و 2 و 3 را در رایانه خودم اجرا کردم و تفاوتی در ترتیب خروجی رخ نداد!
    ولی مورد 4 نیاز به آزمایش ندارد و کاملاً منطقی است.
    دستور Join ریسمان جاری را بلاک میکند و منتظر میماند تا ریسمان ساخته شده کارش پایان یابد.

    ولی در کل پیشنهاد میکنم برای تحقیق و بررسی چند ریسمانی اصلاً از Console.ReadXXX استفاده نکنید.
    اگر میخواهید تقدم و تاخرها را چک کنید از همان Console.WriteLine استفاده کنید و ترتیب چاپ عبارت ها را مشاهده و تحقیق و بررسی کنید.

    موفق باشید.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    منظور شما ریسمان که جوین را فراخوانی کرده است یا ریسمان اصلی برنامه که برنامه رو هدایت میکنه؟
    مثلا اینجا چه لزومی داشته ما جوین رو استفاده کنیم؟
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  5. #4
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    منظور شما ریسمان که جوین را فراخوانی کرده است یا ریسمان اصلی برنامه که برنامه رو هدایت میکنه؟
    اجازه دهید با مثالی توضیح دهیم.
    در t.Join ریسمان فعلی که این دستور را اجرا کرده بلاک خواهد شد و منتظر میماند تا کار ریسمان t به انتها برسد و تمام شود.
    یعنی در ریسمان جاری و سری دستورات جاری، دستور بعد t.Join وقتی اجرا خواهد شد که t تمام شده باشد.

    اینجا چه لزومی داشته ما جوین رو استفاده کنیم؟
    بهتر است بجای "لزوم" از کلمه "پیامد" استفاده کنیم.
    که در این مثال هیچ فرقی ندارد!
    چرا؟

    ریسمانی که شما new کرده اید بطور پیشفرض Foreground است.
    یعنی وقتی Process یا همان برنامه بخواهد تمام شود و بسته شود، منتظر میماند تا ریسمان های Foreground پایان یابند.
    دستور Join چه میکند؟
    منتظر میماند تا ریسمان مورد نظر پایان یابد.
    ((
    یعنی میتوانید چنین تصور کنید که Foreground یک ریسمان مانند آن است که در آخر main روی آن ریسمان Join زده باشید!
    ))


    به همین دلیل در این مثال شما بود و نبود Join فرقی ندارد.
    ولی اگر بعد از new دستور t.IsBackground = true را اضافه کنید و t.Join را هم حذف کنید، آنگاه نمیتوان مطمئن بود همیشه همه پیام های ThreadMethod چاپ شود.

    موفق باشید.

  6. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •