小弟我想实现一个多线程执行一个相同方法,然是又希望每一个线程执行到这个方法时可以自由的分配
我想实现一个多线程执行一个相同方法,然是又希望每一个线程执行到这个方法时可以自由的分配
比如
------解决思路----------------------
google 生产者 消费者
用一个线程作为调度线程(生产者),维护一个队列,队列中放需要做的任务。开一些工作线程(消费者)从对列中取任务并且执行。
------解决思路----------------------
生产者消费者,简单的实现可以用BlockingCollection。
坏处,或者说好处是,对初学者来说它隐藏了一些同步细节。
不过可以肯定的是它的代码比较简单:
比如
publice class ThreadTest
{
private Dictionary<string, bool> _ThreadList = new Dictionary<string, bool>();
publice List<string> TypeList=new List<string>();
publice ThreadTest()
{
//初始化类型
TypeList.Add("A");
TypeList.Add("B");
TypeList.Add("C");
}
public void test(string pType)
{
_ThreadList[pType] = true;//表示正在处理。。。。。。
[align=left]//这里是每一个线程的处理内容 ,我是让他们分开执行,比如,
类型A在执行的时候,类型B要执行,不需要等待A执行,
而是另开一个空间给B去执行,不然的话,B执行有时会覆盖A类型数据的内容,
目的是让他们几个类型的线程能同时执行~互不二扰,要怎么做呢?
希望各位帮我一忙,谢谢了[/align]
_ThreadList[pType] = false;//表示处理完成
}
publice void RunTest()
{
//TypeList.Count最大是20;
for (int i = 0; i < TypeList.Count; i++)
{
string _type = TypeList[i];
if (!_ThreadList.ContainsKey(_type))
{
_ThreadList.Add(_type, false);
}
Thread _t = new Thread(new ParameterizedThreadStart(test));
_t.Priority = ThreadPriority.Lowest;
_t.IsBackground = true;
_t.Start(_type);
}
}
}
------解决思路----------------------
google 生产者 消费者
用一个线程作为调度线程(生产者),维护一个队列,队列中放需要做的任务。开一些工作线程(消费者)从对列中取任务并且执行。
------解决思路----------------------
生产者消费者,简单的实现可以用BlockingCollection。
坏处,或者说好处是,对初学者来说它隐藏了一些同步细节。
不过可以肯定的是它的代码比较简单:
class Test
{
static void Main()
{
const int MaxWorkerCount = 2;
for (int i = 0; i < MaxWorkerCount; i++)
{
ThreadPool.QueueUserWorkItem(WorkerThread);
}
Console.WriteLine("空行退出...");
string str;
while ((str = Console.ReadLine()) != "")
{
workingItems.Add(str);
}
workingItems.CompleteAdding();
Thread.Sleep(3000);
}
static BlockingCollection<string> workingItems = new BlockingCollection<string>();