阅读量:123
C# 中的 synchronized 关键字主要用于确保在同一时刻只有一个线程可以访问共享资源。它适用于以下场景:
- 多线程访问共享资源:当多个线程需要同时访问和修改同一资源时,为了避免数据不一致和竞争条件,可以使用
synchronized关键字来确保资源的线程安全。
public class SharedResource
{
private int counter = 0;
public synchronized void Increment()
{
counter++;
}
public synchronized int GetCounter()
{
return counter;
}
}
- 方法级别的同步:如果你希望确保某个方法在同一时刻只能被一个线程访问,可以在方法声明上添加
synchronized关键字。
public class MyClass
{
public synchronized void MySynchronizedMethod()
{
// 同步代码
}
}
- 保护临界区代码:在多线程环境中,临界区是指同一时刻只能被一个线程执行的代码段。使用
synchronized关键字可以确保在同一时刻只有一个线程执行临界区代码。
public class CriticalSectionExample
{
private object lockObject = new object();
public void CriticalSectionMethod()
{
lock (lockObject)
{
// 临界区代码
}
}
}
- 实现线程安全的集合:C# 中的某些集合类(如
Hashtable、Queue等)是非线程安全的。如果需要在多线程环境中使用这些集合,可以使用synchronized关键字来确保线程安全。
public class ThreadSafeCollection<T>
{
private readonly Queue _queue = new Queue();
public void Enqueue(T item)
{
lock (_queue)
{
_queue.Enqueue(item);
}
}
public T Dequeue()
{
lock (_queue)
{
if (_queue.Count == 0)
return default(T);
var item = _queue.Dequeue();
return item;
}
}
}
需要注意的是,过度使用 synchronized 关键字可能会导致性能下降,因为它会限制多个线程同时执行。在实际应用中,可以根据具体需求选择合适的同步机制,如 lock 语句、Monitor 类、SemaphoreSlim 类等。