在 C# 中创建一个锁池

Creating a pool of locks in C#

我只想使用多线程 C# 应用程序中的一组资源中的一个。这些资源不是线程安全的,因此必须为它们提供一些锁或互斥量。我应该怎么做?

我想得到类似下面的伪代码:

lockAny([obj1, obj2, obj3]) {
    achievedLock = getAchievedLock(); // returns e. g. obj2
    myResource = getResourceForLock(achievedLock); // some function written by me, looks up the resource belonging to the particular lock
    myResource.DoSomething();
}

执行此操作的最佳方法是使用某种池化方法。池对象可以尝试确保一次只有一件事有引用(但 .NET 不能像 Rust 那样保证)。

.NET 最近添加了 Microsoft.Extensions.ObjectPool<T>. You can configure how it creates the items. Some examples here.