PDA

View Full Version : سوال: چگونه می توانیم با استفاده از چند Tread یک حلقه را به حلقه های کوچکتر تبدیل کنیم؟



sadjadesfandiari
شنبه 08 اسفند 1388, 13:54 عصر
سلام دوستان خسته نباشید:لبخندساده:

2 تا سوال دارم ممنون می شم جواب بدین

سوال اول من این هست که اگر برنامه ای برای CPU دو هسته نوشته میشه آیا باید Process اصلی برنامه رو با استفاده از 2 Tread نوشت و یا اگر CPU چهار هسته و یا هشت هسته بود برای استفاده بهینه از CPU باید به تعداد هسته ها Process اصلی رو به Tread های مختلف تقسیم کنیم؟

سوال دوم این هست که کدی در C#‎ برای یه CPU چهار هسته نوشتم برای اینکه یک حلقه For که باید سیگما از 0 تا 4000 را بدست بیاره به چهار قسمت تبدیل کردم وهر قسمت رو به یک Tread دادم ولی هنگامی که یک Tread میسازم و اون و Start میکنم مشخص نمی شه که کی Tread کارش تموم شده و هر بار برنامه اجرا می شه یه مقدار میده اگه میشه راهنماییم کنید.
این هم کد من در #C

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConsoleApplication1
{
class Program
{
static void Main()
{
Counter foo1 = new Counter();
foo1.From = 0;
foo1.To = 1000;
ThreadStart job1 = new ThreadStart(foo1.Count);
Thread thread1 = new Thread(job1);

Counter foo2 = new Counter();
foo2.From = 0;
foo2.To = 1000;
ThreadStart job2 = new ThreadStart(foo2.Count);
Thread thread2 = new Thread(job2);

Counter foo3 = new Counter();
foo3.From = 0;
foo3.To = 1000;
ThreadStart job3 = new ThreadStart(foo3.Count);
Thread thread3 = new Thread(job3);

Counter foo4 = new Counter();
foo4.From = 0;
foo4.To = 1000;
ThreadStart job4 = new ThreadStart(foo4.Count);
Thread thread4 = new Thread(job4);

thread1.Start();
thread2.Start();
thread3.Start();
thread4.Start();

long d = foo1.Sum;
d = d + foo2.Sum;
d = d + foo3.Sum;
d = d + foo4.Sum;

Console.WriteLine("Main thread: {0}", d);
Console.ReadLine();
}
}

public class Counter
{
public long Sum=new long();
public int From;
public int To;
public void Count()
{
for (int i = From; i <= To; i++)
{
Sum++;
}
}

}
}