单子线程通知Parent指示它已完成,因此Parent可以启动另一个子[C#]

时间:2009-09-04 19:12:59

标签: c#

我有一个PARENT线程负责执行作业,每个作业都启动一个CHILD线程来完成工作 - 但是永远不应允许它一次启动一个以上(单个孩子)。例如,在有10个工作要做的情况下,它应该一个接一个地执行 - 因此,每个工作完成后需要知道PARENT,以便它可以启动下一个待处理的工作。

通常我只会.Join()或WaitHandle来完成这项任务 - 除了在这种情况下我不能阻止Parent线程,因为它有其他在等待孩子完成时需要执行的责任...

请允许我说明:

class Parent
{

private Thread threadJob;

public Parent()
    {
    // this is where the main loop occurs
    while (bRun)
        {

        // This is where I need help ... how can I know that threadJob is not currently performing a task?
        // is there an event it can fire to let Parent know that it is done? A flag it can set?
        if (threadJob child is not currently running a job)
            {
            threadJob = new Thread(new ThreadStart(PerformWork));
            threadJob.IsBackground = true;
            threadJob.Start();
            }

        .. do other work ...
        .. keep doing other work ...

        }
    }
};

非常感谢任何帮助或建议。 谢谢,

2 个答案:

答案 0 :(得分:2)

处理此问题的另一种方法是始终保持工作线程处于活动状态,并使其从待处理作业队列中读取。这样,您只能按顺序一次完成一个作业,但您不必担心与主线程同步。作业的输出可以进入自己的队列,主线程可以检查为空,如果没有,则检索。

修改

更仔细地看一下你的例子,看起来线程所做的工作每次都不同,所以也许只是让线程循环而不是终止。

答案 1 :(得分:1)

如果您愿意按照问题所示有效地进行投票,则可以使用Thread.IsAlive