在C#中,确保线程安全的关键是使用同步原语,如lock
关键字、Monitor
类、SemaphoreSlim
类、Mutex
类等。这些同步原语可以确保在同一时间只有一个线程访问共享资源。以下是一些示例:
- 使用
lock
关键字:
private readonly object _lockObject = new object(); public void SafeMethod() { lock (_lockObject) { // 访问共享资源的代码 } }
- 使用
Monitor
类:
private readonly object _lockObject = new object(); public void SafeMethod() { Monitor.Enter(_lockObject); try { // 访问共享资源的代码 } finally { Monitor.Exit(_lockObject); } }
- 使用
SemaphoreSlim
类:
private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1); public async Task SafeMethodAsync() { await _semaphore.WaitAsync(); try { // 访问共享资源的代码 } finally { _semaphore.Release(); } }
- 使用
Mutex
类:
private readonly Mutex _mutex = new Mutex(); public void SafeMethod() { _mutex.WaitOne(); try { // 访问共享资源的代码 } finally { _mutex.ReleaseMutex(); } }
请注意,使用这些同步原语时,需要确保在访问共享资源时始终使用它们。否则,可能会导致数据竞争和不一致的状态。