【发布时间】:2014-04-19 22:02:48
【问题描述】:
如何用线程和任务创建一个生产者和两个消费者?
我尝试了很多方法:阻塞收集、monitor.wait(enter,exit,pulse)、信号量,但似乎无法正常工作。
这里是线程开始:
private void button1_Click(object sender, EventArgs e)
{
Thread Producer = new Thread(new ThreadStart(Task_Producer));
Thread Consumer = new Thread(new ThreadStart(Task_Consumer));
Thread Consumer2 = new Thread(new ThreadStart(Task_Consumer2));
Producer.start();
Consumer.start();
Consumer2.start();
}
这里是线程:
private Task task1;
private Task task2;
private Task task3;
void Task_Producer()
{
task1 = Task.Factory.StartNew(Producer_t);
}
void Task_Consumer()
{
task2 = Task.Factory.StartNew(Consumer_t);
}
void Task_Consumer2()
{
task3 = Task.Factory.StartNew(Consumer_t2);
}
这是任务:
int i=0;
int how_much_numbers=1000;
int number=0;
private void Producer_t()
{
for (i = 0; i < how_much_numbers;i++)
{
//number=random number;
}
}
private void Consumer_t()
{
while (i<how_much_numbers)
{
//Check if number is fibonaci
}
}
private void Consumer_t2()
{
while (i<how_much_numbers)
{
//Check if number is primary
}
}
【问题讨论】:
-
我尝试生成随机数,当与其他任务检查随机数是否是主要的以及写入文件时,与其他任务检查是否是斐波那契并写入文件。需要以某种方式生成随机,等待时,检查是否主要和斐波那契以及继续生成数字时。
-
是什么让消费者不会错过一系列随机数?如何通知消费者有新号码可供消费?
-
这里是全局变量号,也是全局 i。我们可以在此类中的任何功能上联系到谁。但我不知道该怎么做,这里需要在随机数任务和其他继续随机任务作业中以某种方式等待。 en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem
-
你为什么要启动新线程只是为了启动任务?
-
我认为我需要线程和任务。这是我的错误:/