例外:从非同步代码块调用对象同步方法

Ver*_*009 1 .net c# multithreading c#-4.0

我有几个线程写入相同的int.每个线程递增整数值.什么是同步增量操作的简单方法.lock语句仅适用于Object,因此我无法使用它.我还尝试了以下内容:

static int number=0;

static void Main(string[] args)
    {
        ThreadStart ts = new ThreadStart(strtThread);
        new Thread(ts).Start();
        new Thread(ts).Start();
        new Thread(ts).Start();
        new Thread(ts).Start();
        new Thread(ts).Start();
        new Thread(ts).Start();
        Console.ReadLine();
    }

    public static void strtThread()
    {
        bool lockTaken = false;

        Monitor.Enter(number,ref lockTaken);
        try
        {
            Random rd = new Random();
            int ee = rd.Next(1000);
            Console.WriteLine(ee);
            Thread.Sleep(ee);
            number++;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        finally 
        {
            if (lockTaken)
            {
             Monitor.Exit(number);
            }

        }
    }
Run Code Online (Sandbox Code Playgroud)

它给了我以下错误:

从不同步的代码块调用对象同步方法.

dtb*_*dtb 5

您可以使用Interlocked.Increment方法在不锁定的情况下自动递增整数:

public static void strtThread()
{
    Interlocked.Increment(ref number);
}
Run Code Online (Sandbox Code Playgroud)

如果您有多个语句,则可以创建可以锁定对象实例:

private static int number = 0;
private static readonly object gate = new object();

public static void strtThread()
{
    lock (gate)
    {
       number++;
    }    
}
Run Code Online (Sandbox Code Playgroud)