У меня есть следующий код:
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;
}
Метод Update
может выполняться в двух или более потоках, и я использую lock
для предотвращения проблем с синхронизацией с foo
. Но я хотел бы заблокировать только те Foo
, у которых есть похожие Id
. Например, если один поток выполняет метод Update
с Foo.Id = 1, а другой поток выполняет Update
с Foo.Id = 2, то lock
не нужен, а если два потока выполняют Update с двумя экземплярами Foo
с одним и тем же Id
, требуется lock
. Можно ли создать такой замок?