C# lock 案例
时间: 2024-09-11 18:18:13 浏览: 43
银行存取款案例(C#编程) c#经典案例.doc
在C#中,`lock`关键字用于控制对共享资源的访问,以防止多个线程同时执行某个代码块,即提供互斥访问。`lock`通常与对象一起使用,这些对象称为锁对象。锁对象的作用域应是私有的,不应被外部直接访问。以下是一个简单的`lock`使用示例:
```csharp
public class SharedResource
{
private readonly object _locker = new object();
private int _resource;
public void Increment()
{
lock (_locker)
{
_resource++;
}
}
}
// 使用示例
var sharedResource = new SharedResource();
// 在不同的线程中调用Increment方法
Task.Run(() => sharedResource.Increment());
Task.Run(() => sharedResource.Increment());
```
在上面的代码中,`SharedResource`类有一个名为`_locker`的私有锁对象,它用于控制对`_resource`成员变量的互斥访问。`Increment`方法中的代码块在执行时会被锁定,这样即使多个线程尝试执行这个方法,同一时间内也只有一个线程可以进入这个代码块。
使用`lock`时需要考虑以下几点:
- 确保锁对象是私有的,且不会在其他地方被公开引用,以避免出现潜在的竞争条件。
- `lock`块内部不应包含长时间的操作,以避免造成其他线程长时间等待。
- 尽量减少锁定区域的代码量,以减少锁的竞争和持有时间。
阅读全文