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

C# multi-thread huge lag and blocking

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

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

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

        }
    }

但是,当两个或多个线程以这种方式工作时,似乎仅while(true) 语句就会阻塞整个程序....

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

非常感谢。

有几个问题与您的问题相关。

首先你没有启动同一个线程,我认为你所做的是用相同的 "thread function" 前 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
        }
    }