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)
它给了我以下错误:
从不同步的代码块调用对象同步方法.
您可以使用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)