我因为不知道这个而失败了一次面试。所以我写这篇文章,确保这种情况不会再发生在你身上。
锁定允许我们控制有多少线程可以访问代码中的某个部分。
为什么要这样做呢?
因为你想保护对昂贵资源的访问。而且你需要锁定提供的并发控制。由于我很少使用低级代码,所以我尝试使用lock语句来实现这一点。结果一切都变得一团糟。
lock语句在异步代码中不起作用。这是有道理的,因为你无法保证哪个线程会完成你的异步方法。那么解决方案是什么呢?
你需要使用一个可以异步工作的同步原语。
在C#中有很多选择,而SemaphoreSlim是一个很好的选择。
你可以设置最大计数值(允许进入的线程数)来获得所需的并发级别。
两个重要的注意事项:
在等待信号量时使用超时
在你离开之前,给你一个有趣的问题。你会如何在分布式系统中实现锁定?
转载:https://twitter.com/mjovanovictech/status/1694594265928650988