C# lock 字符春
时间: 2023-08-26 07:05:54 浏览: 54
在 C# 中,`lock` 关键字用于实现互斥锁(Mutex),以确保多个线程不会同时访问共享资源。`lock` 语句用于定义一个代码块,在进入该代码块时获取锁,并在退出代码块时释放锁。这样可以保证同一时间只有一个线程能够执行这段被锁定的代码。
以下是 `lock` 关键字的基本语法:
```csharp
lock (lockObj)
{
// 临界区代码
}
```
其中,`lockObj` 是一个对象,可以是任意有效的引用类型对象。通常情况下,我们会创建一个专门用于锁定的对象。
在 `lock` 代码块中,可以放置需要进行互斥操作的代码,这部分代码在同一时间只能由一个线程执行。其他线程在尝试进入同一 `lock` 代码块时,会被阻塞,直到获得锁为止。
需要注意的是,`lock` 关键字会自动处理锁的获取和释放,因此无需手动调用锁的相关方法。
下面是一个简单的示例,展示了如何使用 `lock` 关键字来保证字符串拼接操作的线程安全:
```csharp
class Program
{
static object lockObj = new object();
static string result = "";
static void Main(string[] args)
{
Thread t1 = new Thread(AppendString);
Thread t2 = new Thread(AppendString);
t1.Start("Hello");
t2.Start("World");
t1.Join();
t2.Join();
Console.WriteLine(result); // 输出:HelloWorld
}
static void AppendString(object input)
{
string text = (string)input;
lock (lockObj)
{
result += text;
}
}
}
```
在上述示例中,`AppendString` 方法被两个线程同时调用,并传入不同的字符串。使用 `lock` 关键字确保了 `result` 字符串的拼接操作在同一时间只能由一个线程进行,从而避免了竞态条件(race condition)。最终输出的结果是正确的拼接字符串。