2016 - 2024

感恩一路有你

掌握 C 锁定机制,保护关键代码运行

浏览量:1163 时间:2024-08-11 22:28:24 作者:采采

C 中的 lock 关键字

在 C 中,`lock` 关键字可以用来确保代码块完整运行,不会被其他线程中断。它通过为给定对象获取互斥锁来实现这一功能。下面我们通过一个简单的例子来演示 `lock` 关键字的使用。

单线程测试 lock 关键字

1. 打开 Visual Studio 2008 开发工具,新建一个控制台应用程序,命名为"Lock 学习"。

2. 打开刚刚新建的项目,打开 `Program.cs` 文件。

3. 在程序中编写一个单线程 lock 测试代码,如下所示:

```csharp

static void Main(string[] args)

{

LockExample();

}

static void LockExample()

{

object lockObject new object();

lock (lockObject)

{

Console.WriteLine("Lock acquired. Performing critical operation...");

(3000); // Simulating a time-consuming operation

Console.WriteLine("Critical operation completed.");

}

Console.WriteLine("Lock released.");

}

```

4. 运行程序,可以看到输出结果如下:

```

Lock acquired. Performing critical operation...

Critical operation completed.

Lock released.

```

多线程测试 lock 关键字

接下来我们编写一个多线程测试程序,看看 `lock` 关键字如何保护关键代码块:

1. 在 `Program.cs` 文件中添加以下代码:

```csharp

static void MultiThreadedLockExample()

{

object lockObject new object();

Thread thread1 new Thread(() >

{

lock (lockObject)

{

Console.WriteLine($"Thread 1 acquired lock. Performing critical operation...");

(3000);

Console.WriteLine($"Thread 1 completed critical operation.");

}

});

Thread thread2 new Thread(() >

{

lock (lockObject)

{

Console.WriteLine($"Thread 2 acquired lock. Performing critical operation...");

(3000);

Console.WriteLine($"Thread 2 completed critical operation.");

}

});

();

();

();

();

}

```

2. 在 `Main` 方法中调用 `MultiThreadedLockExample()` 方法:

```csharp

static void Main(string[] args)

{

MultiThreadedLockExample();

}

```

3. 运行程序,可以看到输出结果如下:

```

Thread 1 acquired lock. Performing critical operation...

Thread 1 completed critical operation.

Thread 2 acquired lock. Performing critical operation...

Thread 2 completed critical operation.

```

从输出结果可以看出,两个线程轮流获取锁,依次执行临界区代码,确保了临界区代码的完整性和线程安全。

总结

通过这个简单的示例,我们了解了 C 中 `lock` 关键字的用法。它可以用来保护关键代码块,确保在多线程环境下代码的正确执行。掌握 `lock` 关键字的使用对编写高质量的多线程程序非常重要。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。