使用 lock
关键字可以确保在同一时刻只有一个线程可以访问被锁定的代码块,从而避免线程资源竞争。以下是修改后的示例代码:
csharp
using System;
using System.Threading;
class Program
{
static int sharedNumber = 0;
static int iterations = 1000000;
static object lockObject = new object();
static void Main(string[] args)
{
Thread thread1 = new Thread(Increment);
Thread thread2 = new Thread(Increment);
thread1.Start();
thread2.Start();
//等待线程执行完毕(不加join结果可能会不一样)
thread1.Join();
thread2.Join();
Console.WriteLine("Final shared number: " + sharedNumber);
}
static void Increment()
{
for (int i = 0; i < iterations; i++)
{
lock (lockObject)
{
sharedNumber++;
}
}
}
}
在这个示例中,我们使用 lock
关键字来锁定对 sharedNumber
的访问。这样,只有一个线程可以同时访问 sharedNumber
,从而避免了线程资源竞争,确保了正确的递增操作。