C面试题-锁

C面试题-锁列举常用的锁 SemaphoreSli 轻量级的信号量 用于控制同时访问资源的线程数量 ManualResetE 手动重置事件 用于线程间的信号通知和同步

大家好,欢迎来到IT知识分享网。

列举常用的锁

  1. SemaphoreSlim:轻量级的信号量,用于控制同时访问资源的线程数量。
  2. ManualResetEventSlim:手动重置事件,用于线程间的信号通知和同步。
  3. ReaderWriterLockSlim:读写锁,允许多个线程同时读取共享资源,但只允许一个线程写入资源;通过EnterReadLock和EnterWriteLock方法获取读锁和写锁,通过ExitReadLock和ExitWriteLock方法释放锁。
  4. Mutex:互斥锁,用于控制对共享资源的访问,确保只有一个线程可以访问资源。
  5. AutoResetEvent:自动重置事件,用于线程间的信号通知和同步。

lock是一种什么样的锁?

lock是一个混合锁,lock关键字提供了一种简单的方式来实现对对象的互斥访问,其实质是Monitor,lock关键字会自动获取对象的锁,并在作用域结束时释放,确保临界区代码的互斥执行。

using System;

using System.Threading;

private static object lockObject = new object(); // 定义一个对象作为锁

{

for (int i = 1; i <= 5; i++)

{

}

}

static void AccessSharedResource(int threadId)

{

lock (lockObject) // 使用lock关键字获取对象的锁

{

Console.WriteLine($”Thread {threadId} is accessing the shared resource.”);

Thread.Sleep(1000); // 模拟处理资源的时间

Console.WriteLine($”Thread {threadId} released the shared resource.”);

}

}

}

什么是死锁?

死锁:

当多个线程同时持有一些资源,并且每个线程都在等待其他线程释放资源时,就可能发生死锁。最终导致程序无法继续执行,严重影响程序的性能和稳定。

死锁常见的情形:

  • 互斥等待:多线程同时持有某些资源,并且每个线程在等待其他线程释放资源时形成循环等待。
  • 资源竞争:多线程竞争有限的资源,当资源分配不当时可能会导致死锁
  • 嵌套锁:线程已经持有一个锁的同时尝试获取另外一个锁,可能导致死锁。

避免死锁的措施:

  • 使用超时机制:在获取锁时设置超时时间,避免长时间的等待造成死锁。
  • 按顺序获取锁:确保线程获取锁的顺序是一致的,避免循环等待。
  • 避免嵌套锁:尽量避免在持有一个锁的情况下尝试获取另外一个锁。
  • 避免资源竞争:合理设计资源的分配和释放策略,避免资源争夺导致死锁。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/169915.html

(0)
上一篇 2025-02-11 13:00
下一篇 2025-02-11 13:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信