نمایش نتایج 1 تا 10 از 10

نام تاپیک: پر شدن صف و کنترل کردن Threadها

  1. #1
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    ????? - ??????
    پست
    424

    پر شدن صف و کنترل کردن Threadها

    سلام.

    میخواستم بگم من یه صف (queue) درست کردن و در اون با استفاده از چند thread مقدار وارد این صف میکنم

    حالا با یه مشکلی مواجه شدم و اون هم اینه که وقتی صفم پر میشه از اطلاعات thread بعدی وارد نمیشه. و اطلاعات چندین thrad را رها میکنه

    چه طوری باید این thread ها را زمانی که صف پر میشه متوقف کنم و زمانی که thread خالی میشه دوباره شروع به کار کنن؟

    ممنون

  2. #2

    نقل قول: پر شدن صف و کنترل کردن Threadها

    اگه اول هر ترد پر و خالی بودن صف چک بشه فکر کنم مشکلت حل بشه.

  3. #3
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    ????? - ??????
    پست
    424

    نقل قول: پر شدن صف و کنترل کردن Threadها

    نقل قول نوشته شده توسط us1234 مشاهده تاپیک
    اگه اول هر ترد پر و خالی بودن صف چک بشه فکر کنم مشکلت حل بشه.
    می دونم دوست عزیز:
    اول بار چک میکنه که صف پر هست یا خالی بعد اگه پر بود باید چی کار کنه؟

  4. #4

    نقل قول: پر شدن صف و کنترل کردن Threadها

    راستش یکم فکر کردم اینکار راه حلی نداره جز اینکه از حالت تردی خارج بشه و بصورت تک روندی انجام بشه . هر روشی هم که ارائه بشه ( مثل استفاده از سمافور و ... ) عملا داری ترد ها را محدود میکنی تا به یک روند ساده برسی .

  5. #5
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    ????? - ??????
    پست
    424

    نقل قول: پر شدن صف و کنترل کردن Threadها

    نقل قول نوشته شده توسط us1234 مشاهده تاپیک
    راستش یکم فکر کردم اینکار راه حلی نداره جز اینکه از حالت تردی خارج بشه و بصورت تک روندی انجام بشه . هر روشی هم که ارائه بشه ( مثل استفاده از سمافور و ... ) عملا داری ترد ها را محدود میکنی تا به یک روند ساده برسی .
    میشه بگی سمافور چیه؟

  6. #6

    نقل قول: پر شدن صف و کنترل کردن Threadها

    اگه اصرار نداری خودت بنویسی یه کلاس آماده به نام ConcurrentQueue برای این کار از قبل نوشته شده:
    تمام هماهنگی ها به شکل داخلی پیاده شده. مثلاً اگه TryDequeue رو همزمان برای گرفتن مقدار از صف صدار بزنن هیچکدوم بلوک نمیشن. در صورت کشف یک تداخل یکی از دو باید سعی کنه بعداً آیتم رو برداره. تمام عملیات به شکل اتمیک انجام میشه.http://msdn.microsoft.com/en-us/library/dd267265.aspx

    using System;
    using System.Collections.Concurrent;
    using System.Threading;
    using System.Threading.Tasks;

    class CQ_EnqueueDequeuePeek
    {
    // Demonstrates:
    // ConcurrentQueue<T>.Enqueue()
    // ConcurrentQueue<T>.TryPeek()
    // ConcurrentQueue<T>.TryDequeue()
    static void Main ()
    {
    // Construct a ConcurrentQueue.
    ConcurrentQueue<int> cq = new ConcurrentQueue<int>();

    // Populate the queue.
    for (int i = 0; i < 10000; i++) cq.Enqueue(i);

    // Peek at the first element.
    int result;
    if (!cq.TryPeek(out result))
    {
    Console.WriteLine("CQ: TryPeek failed when it should have succeeded");
    }
    else if (result != 0)
    {
    Console.WriteLine("CQ: Expected TryPeek result of 0, got {0}", result);
    }

    int outerSum = 0;
    // An action to consume the ConcurrentQueue.
    Action action = () =>
    {
    int localSum = 0;
    int localValue;
    while (cq.TryDequeue(out localValue)) localSum += localValue;
    Interlocked.Add(ref outerSum, localSum);
    };

    // Start 4 concurrent consuming actions.
    Parallel.Invoke(action, action, action, action);

    Console.WriteLine("outerSum = {0}, should be 49995000", outerSum);
    }
    }

  7. #7
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    ????? - ??????
    پست
    424

    نقل قول: پر شدن صف و کنترل کردن Threadها

    نقل قول نوشته شده توسط tooraj_azizi_1035 مشاهده تاپیک
    اگه اصرار نداری خودت بنویسی یه کلاس آماده به نام ConcurrentQueue برای این کار از قبل نوشته شده:
    تمام هماهنگی ها به شکل داخلی پیاده شده. مثلاً اگه TryDequeue رو همزمان برای گرفتن مقدار از صف صدار بزنن هیچکدوم بلوک نمیشن. در صورت کشف یک تداخل یکی از دو باید سعی کنه بعداً آیتم رو برداره. تمام عملیات به شکل اتمیک انجام میشه.http://msdn.microsoft.com/en-us/library/dd267265.aspx

    using System;
    using System.Collections.Concurrent;
    using System.Threading;
    using System.Threading.Tasks;

    class CQ_EnqueueDequeuePeek
    {
    // Demonstrates:
    // ConcurrentQueue<T>.Enqueue()
    // ConcurrentQueue<T>.TryPeek()
    // ConcurrentQueue<T>.TryDequeue()
    static void Main ()
    {
    // Construct a ConcurrentQueue.
    ConcurrentQueue<int> cq = new ConcurrentQueue<int>();

    // Populate the queue.
    for (int i = 0; i < 10000; i++) cq.Enqueue(i);

    // Peek at the first element.
    int result;
    if (!cq.TryPeek(out result))
    {
    Console.WriteLine("CQ: TryPeek failed when it should have succeeded");
    }
    else if (result != 0)
    {
    Console.WriteLine("CQ: Expected TryPeek result of 0, got {0}", result);
    }

    int outerSum = 0;
    // An action to consume the ConcurrentQueue.
    Action action = () =>
    {
    int localSum = 0;
    int localValue;
    while (cq.TryDequeue(out localValue)) localSum += localValue;
    Interlocked.Add(ref outerSum, localSum);
    };

    // Start 4 concurrent consuming actions.
    Parallel.Invoke(action, action, action, action);

    Console.WriteLine("outerSum = {0}, should be 49995000", outerSum);
    }
    }
    دوست عزیز ممنونم اما من با این کلاس آشنایی داشتم ولی می خوام خودم بنویسم

  8. #8

    نقل قول: پر شدن صف و کنترل کردن Threadها

    توی برنامه نویسی همروند چندین ابزار هست که بسته به نیاز میشه از اونا استفاده کرد یکی از این ابزار ها سمافور ها هستند .
    سمافور را میشه مثل یک قفل در نظر گرفت که بسته به شرایط میتونه انجام کار یک ترد را pause کنه و بعد دوباره ادامه بده
    تو سی شارپ دانت 4 اینجور تعریف میشه
    static SemaphoreSlim sem1 = new SemaphoreSlim(1);


    ابزارهای دیگه هم هست مثل فورک ، لاک و یا پارالل فور

  9. #9

    نقل قول: پر شدن صف و کنترل کردن Threadها

    source کلاس ConcurrentQueue رو ببین:
    http://www.dotnetframework.org/defau...urrentQueue@cs

  10. #10
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    ????? - ??????
    پست
    424

    نقل قول: پر شدن صف و کنترل کردن Threadها

    نقل قول نوشته شده توسط tooraj_azizi_1035 مشاهده تاپیک
    source کلاس ConcurrentQueue رو ببین:
    http://www.dotnetframework.org/defau...urrentQueue@cs
    میشه یه توضیح کوتاه در موردش بدید اخه من از این کلاس چیزی سر در نیاوردم

تاپیک های مشابه

  1. سوال: وارد شدن به برنامه پس از کنترل کردن شناسه ی کاربری و گذر واژه
    نوشته شده توسط voice.of.silence در بخش C#‎‎
    پاسخ: 17
    آخرین پست: شنبه 11 آذر 1391, 10:56 صبح
  2. کنترل کردن ابجکتهای VS2005
    نوشته شده توسط tc1000 در بخش طراحی وب (Web Design)
    پاسخ: 1
    آخرین پست: دوشنبه 25 تیر 1386, 23:26 عصر
  3. کنترل کردن اتصال یا عدم اتصال به شبکه در کد برنامه
    نوشته شده توسط akram_raeespour در بخش Access
    پاسخ: 8
    آخرین پست: سه شنبه 15 اسفند 1385, 10:10 صبح
  4. کنترل کردن port ها
    نوشته شده توسط ICEMAN در بخش امنیت در شبکه
    پاسخ: 3
    آخرین پست: جمعه 16 دی 1384, 15:48 عصر
  5. submit شدن فرم با enter کردن
    نوشته شده توسط shahroq در بخش طراحی وب (Web Design)
    پاسخ: 4
    آخرین پست: یک شنبه 05 تیر 1384, 00:44 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •