为其他线程中的属性赋值

时间:2015-07-22 02:58:04

标签: c# multithreading static attributes lazy-initialization

我想在att = 5中为thread t分配值。在main thread中,我想检查att是否已分配给5

当我运行void check()时,输出始终为3。为什么是这样?

class Program
{
    static int att = 3;
    static void Main(string[] args)
    {
        Thread t = new Thread(() => set(att));
        t.Start();
        check();
    }
    static void set(int para)
    {
        para = 5;
    }
    static void check()
    {
        while (att != 5)
        {
            Console.WriteLine(att);
        }
        Console.WriteLine(att);
    }
}

2 个答案:

答案 0 :(得分:0)

您正在修改para变量而不是att变量,因此att始终等于3.

尝试更改此内容:

static void set(int para)
{
    para = 5;
}

要:

static void set(int para)
{
    att = 5;
}

答案 1 :(得分:0)

更改para方法中set()的值不会对att的原始值产生任何影响,除非您指定参数应通过引用传递。< / p>

此外,您需要在线程上调用Join()以确保在线程实际完成修改之前不会尝试将值打印到控制台。

static void Main(string[] args)
{
    Thread t = new Thread(() => set(ref att));
    t.Start();
    t.Join();

    check();
}

static void set(ref int para)
{
    para = 5;
}