C#多线程巨大滞后和阻塞

时间:2015-01-20 04:02:27

标签: c# multithreading

我正在使用C#UI来触发多个线程。每个线程代表一个功能,可能需要几分钟才能完成。

UI可能会多次触发同一个线程,因此我需要多次重启该线程。但是线程无法重新启动。因此,我为线程创建了一个状态变量,当状态不正确时,线程将不执行代码:

    private void FindThread(int nod)
    {
        //Find the minimum reading 
        while (true)
        {
            if (state == MYSTATE.find)
            {
               dowork();
            }

        }
    }

但是,当两个或多个线程以这种方式工作时,似乎只有while(true)句子会阻止整个程序....

在我的程序中,一次只有一个线程会执行其任务。我正在考虑用案例制作一个大线程。 我可以就此提出你的建议吗?我认为可以有更好的解决方案。

非常感谢。

1 个答案:

答案 0 :(得分:1)

您的问题有几个问题。

首先,你没有开始相同的线程,我认为你所做的是用相同的线程函数启动线程" ex-LongTask()Simple Thread tutorial

其次,如果你必须为同一类任务使用多个线程,那么开始一个新线程并结束是非常昂贵的。对于这种情况,您可以使用线程池Thread Pools

你现在面临的问题是竞争条件。可能是多个线程使用相同的资源[stateMYSTATE.find]并更新该资源,以便您的条件创建死锁。 read about deadlock

一些建议 -

使用LOCKS来避免竞争条件

   private Object thisLock = new Object();

    public void MyThreadMethod()
    {
        lock (thisLock)
        {
           // Accessing common resources
        }
    }