在C#中,synchronized 并不是一个关键字
使用 lock 语句:
当你需要保护代码块以防止多线程同时访问共享资源时,可以使用 lock 语句。lock 语句会获取给定对象的独占锁,确保在同一时间只有一个线程能够执行该代码块。
private readonly object _lockObject = new object();public void SomeMethod(){ lock (_lockObject) { // 临界区代码 }}使用 Monitor 类:
Monitor 类提供了更多的同步原语,如 Enter、Exit、Wait 和 Pulse。这些方法可以用于实现更复杂的同步场景。
private readonly object _lockObject = new object();public void SomeMethod(){ Monitor.Enter(_lockObject); try { // 临界区代码 } finally { Monitor.Exit(_lockObject); }}使用并发集合:
对于一些特定的数据结构,如列表、字典等,.NET 提供了线程安全的并发集合。这些集合内部已经实现了同步机制,因此可以直接在多线程环境中使用。
private ConcurrentDictionary<int, string> _concurrentDictionary = new ConcurrentDictionary<int, string>();public void AddOrUpdate(int key, string value){ _concurrentDictionary.AddOrUpdate(key, value, (k, oldValue) => value);}使用 SemaphoreSlim 或 Semaphore 类:
当你需要限制同时访问某个资源的线程数量时,可以使用 SemaphoreSlim 或 Semaphore 类。这些类允许你控制同时进入临界区的线程数量。
private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(5);public async Task SomeMethodAsync(){ await _semaphore.WaitAsync(); try { // 临界区代码 } finally { _semaphore.Release(); }}使用 ReaderWriterLockSlim 或 ReaderWriterLock 类:
当你需要在多线程环境中实现读写分离时,可以使用 ReaderWriterLockSlim 或 ReaderWriterLock 类。这些类允许多个线程同时读取共享资源,但在写入时会阻止其他线程访问。
private readonly ReaderWriterLockSlim _readerWriterLock = new ReaderWriterLockSlim();public void ReadData(){ _readerWriterLock.EnterReadLock(); try { // 读取共享资源 } finally { _readerWriterLock.ExitReadLock(); }}public void WriteData(){ _readerWriterLock.EnterWriteLock(); try { // 修改共享资源 } finally { _readerWriterLock.ExitWriteLock(); }}总之,在C#中,没有 synchronized 关键字,但有许多其他同步原语可以用来保护共享资源。根据你的需求选择合适的同步机制,确保在多线程环境中正确地同步代码。


