在 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.
我只想使用多线程 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.