C#lock不会使我的变量变为私有

时间:2016-12-10 20:42:36

标签: c# multithreading parallel-processing locking

我需要将每个线程的变量“counter”保密。

我试图使用:

object locker = new object();
private object locker = new object(); 
private static readonly object locker = new object();

但它们都不起作用。

我还有其他方法可以解决这个问题吗?

这是我的代码。

public partial class Form1 : Form
{

    int counter = 0;
    private static readonly object locker = new object();
    public Form1()
    {
        InitializeComponent();
        Task t1 = new Task(() =>
        {
            func();
        });
        Task t2 = new Task(() =>
        {
            func();
        });
        // two threads
        t1.Start();
        t2.Start();
    }

    void func()
    {
        lock (locker)
        {
            counter++;
            Console.Write(counter + " "); // prints "1 2"
                                          // it should print "1 1"
        }
    }
}

1 个答案:

答案 0 :(得分:3)

查看此链接https://msdn.microsoft.com/en-us/library/system.threading.thread.priority(v=vs.110).aspx

[ThreadStatic]
static long threadCount = 0;

我认为这会对你有帮助。