在C#中,synchronized
并不是一个关键字。但是,您可以使用 lock
语句来实现类似的功能,确保在同一时间只有一个线程可以访问特定的代码块。
下面是一个使用 lock
语句的示例:
using System;
using System.Threading;
class Program
{
private static readonly object _lockObject = new object();
private static int _counter = 0;
static void Main(string[] args)
{
Thread t1 = new Thread(IncrementCounter);
Thread t2 = new Thread(IncrementCounter);
t1.Start();
t2.Start();
t1.Join();
t2.Join();
Console.WriteLine("Counter: " + _counter);
}
private static void IncrementCounter()
{
for (int i = 0; i < 100000; i++)
{
lock (_lockObject)
{
_counter++;
}
}
}
}
在这个示例中,我们创建了两个线程 t1
和 t2
,它们都会调用 IncrementCounter
方法。IncrementCounter
方法中的 lock
语句确保在同一时间只有一个线程可以访问 _counter++
代码块。这样可以防止多线程导致的竞态条件,确保 _counter
的值在两个线程完成后正确地增加到200000。