C# – 锁定线程
多线程是任何编程语言的强大概念之一。它基本上是基于线程的多处理。在这个过程中,程序被分成不同的部分,这些部分可以同时或同时执行。在程序中使用多线程的好处是它可以最大限度地利用我们系统的 CPU。线程是可能与另一个线程共享资源的轻量级子进程。这就是为什么使用多线程机制的程序往往会消耗更少的空间。这随着多任务处理而变化,因为在这种情况下,为不同的任务分配了单独的内存。本文重点介绍通过 C# 演示锁定线程。
锁定线程
lock 语句用于对指定对象进行互斥锁。它执行指定的块,然后释放锁。在锁处于活动状态期间,持有锁的线程可以再次获取和释放锁。请注意,任何其他线程都无法访问该锁,并且它会等待,除非该锁被释放。
句法:
lock (exp)
{
// body
}
这里,exp 是引用类型的表达式。
注意:在 lock 语句中不能使用 await运算符。
示例:在下面的程序中,我们使用了一个 for 循环,并且在迭代的每一步,我们都在创建一个新线程。在这里,我们使用 lock 关键字将语句块指定为临界区,方法是获取指定对象的互斥锁,然后执行语句。现在 sleep() 方法已用于将线程暂停特定时间段,然后它将释放锁。
C#
// C# program to illustrate lock in thread
using System;
using System.Threading;
class GFG{
// Creating a reference type object
static readonly object obj = new object();
static void Sample()
{
// Lock statement block
lock(obj)
{
// Sleep the thread
Thread.Sleep(20);
// Print the count
Console.WriteLine(Environment.TickCount);
}
}
// Driver code
static public void Main()
{
// Iterate using a for-loop
for(int i = 0; i < 5; i++)
{
// Create a new thread
ThreadStart begin = new ThreadStart(Sample);
// Start executing the thread
new Thread(begin).Start();
}
}
}
输出:
-1836894307
-1836894283
-1836894263
-1836894243
-1836894223