在多个线程上执行功能

时间:2018-07-11 15:27:33

标签: c# multithreading

我正在尝试使用ThreadPooling在多个线程上拼接工作。我想使用每个可用线程将一个数组成员的输出分配(并在程序的不同部分进行计算)。

它确实可以工作,但是比仅仅将它们添加到单个线程上要慢得多。我的用法是否错误,或者此操作对于多线程而言是否过于简单?

arrayI和arrayX变量在classScope中,我无法将它们作为QueueUserWorkItem参数传递而未在setNeuronInput中进行转换。

if (layerType != 0)
        {
            for (arrayI = 0; arrayI < layerSize -1 ; arrayI++)
            {
                for (arrayX = 0; arrayX < network.Layers[layerIndex - 1].layerSize - 1; arrayX++)
                {
                    ThreadPool.QueueUserWorkItem(new WaitCallback(setNeuronInput), null);

                    //Neurons[i].input[x] = _network.Layers[layerIndex - 1].Neurons[x].output;
                }

            }
        }

        //ThreadPool.GetAvailableThreads(out availableThreads, out placeHolder);
        //while (availableThreads != maxThreads)
        //{
        //    ThreadPool.GetAvailableThreads(out availableThreads, out placeHolder);
        //}
        //return;

    }



    public void setNeuronInput(object o)
    {
        try
        {
            //Console.WriteLine("Thread is working");
            Neurons[arrayI].input[arrayX] = network.Layers[layerIndex - 1].Neurons[arrayX].output;
        }
        catch(Exception e)
        {
            Console.WriteLine(e);
            Console.WriteLine("ArrayI is : " + arrayI);
            Console.WriteLine("ArrayX is : " + arrayX);
            Console.ReadLine();
        }
    }

0 个答案:

没有答案