我因为不知道这个而失败了一次面试。所以我写这篇文章,确保这种情况不会再发生在你身上。

锁定允许我们控制有多少线程可以访问代码中的某个部分。

为什么要这样做呢?

因为你想保护对昂贵资源的访问。而且你需要锁定提供的并发控制。由于我很少使用低级代码,所以我尝试使用lock语句来实现这一点。结果一切都变得一团糟。

lock语句在异步代码中不起作用。这是有道理的,因为你无法保证哪个线程会完成你的异步方法。那么解决方案是什么呢?

你需要使用一个可以异步工作的同步原语。

在C#中有很多选择,而SemaphoreSlim是一个很好的选择。

你可以设置最大计数值(允许进入的线程数)来获得所需的并发级别。

两个重要的注意事项:

在等待信号量时使用超时

  • 确保在try-finally中释放锁
  • 现在你已经准备好在实际工作中使用锁定了。

在你离开之前,给你一个有趣的问题。你会如何在分布式系统中实现锁定?

SemaphoreSlim文档

转载:https://twitter.com/mjovanovictech/status/1694594265928650988