Pup*_*kin 7 c# concurrency multithreading locking
我有以下代码:
public void Update(Foo foo)
{
lock(_locker)
{
UpdateFirstPart(foo.First);
UpdateSecondPart(foo.Second);
UpdateThirdPart(foo.Third);
}
}
public class Foo
{
public int Id;
public Some1 First;
public Some2 Second;
public Some3 Third;
}
Run Code Online (Sandbox Code Playgroud)
方法Update可以在两个或多个线程中执行,我lock用来防止cuncurency问题foo.但我想只锁定那些Foo有类似的东西Id.例如,如果一个线程执行方法Update与Foo.Id = 1和另一线程执行Update与Foo.Id = 2,则lock不需要和如果两个线程执行更新与两个实例Foo具有相同的Id,lock是需要的.是否可以创建这样的锁?
lock(foo)当你确定的时候你就可以
foo锁定Id您无法锁定int Id.
唉,我使用具有相同 Id 的 Foo 的不同实例
然后你可以尝试ConcurrentDictionary<int, object>为每个 ID 存储不同的 _locker 。但这会增加一些开销,以及当您长时间运行字典时清理该字典的问题。