简体   繁体   English

C#问题中的多线程返回值

[英]Multi-Threading in c# issue with returning value

I think I'm doing something incredibly wrong, but I don't know what. 我想我做错了什么,但我不知道怎么办。 When I run this code, the two thread (thread1 and thread2) result immediately not alive, but the value in val1 and val2 are not correctly set. 当我运行此代码时,两个线程(线程1和线程2)立即失效,但是val1和val2中的值未正确设置。

The part of the code not in the thread works, if I call Process with level = 0, I get the two correct results in val1 and val2. 不在线程中的那部分代码可以正常工作,如果我以level = 0调用Process,我将在val1和val2中得到两个正确的结果。

public int Process(int left, int right, List<int> array, int level)
    {

        int val1, val2;
        val1 = 0;
        val2 = 0;

        int val = array[left] + array[right] + (right - left);

        if (level > 0)
        {
            if ((right - left) > 1)
            {
                var thread1 = new Thread(() => { val1 = Process(left, right - 1, array, level - 1); });

                var thread2 = new Thread(() => { val2 = Process(left - 1, right, array, level - 1); });

                while (thread1.IsAlive)
                {
                    System.Threading.Thread.Sleep(100);
                }

                while (thread2.IsAlive)
                {
                    System.Threading.Thread.Sleep(100);
                }

                val = Math.Max(Math.Max(val1, val2), val);
            }
        }
        else
        {

            if ((right - left) > 1)
            {
                val1 = Process(left, right - 1, array, level);
                val2 = Process(left + 1, right, array, level);
                val = Math.Max(Math.Max(val1, val2), val);
            }
        }

        return val;
    }

You created threads, but didn't start them. 您创建了线程,但是没有启动它们。 Call Thread.Start() after creation. 创建后调用Thread.Start()。

var thread1 = new Thread(() => { val1 = Process(left, right - 1, array, level - 1); });
var thread2 = new Thread(() => { val2 = Process(left - 1, right, array, level - 1); });
thread1.Start();
thread2.Start();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM