동일한 데이터 집합에서 작동하는 서로 다른 개체간에 잠금을 "공유"하는 일반적인 방법이 있습니까?C# 멀티 스레딩 공유 잠금
잠금을위한 공용 개체를 갖는 것이 일반적으로 권장되지 않는다는 것을 알고 있습니다.
예를 들어, 대기열은 스레드 안전성으로 구현 될 수 있지만 다른 대기열은 여러 대기열 작업을 잠 그려면 특정 잠금이 필요할 수 있습니다. 세 번째 클래스가 있고이 동일한 Queue 인스턴스에서 여러 개의 잠긴 작업을 수행해야하는 경우 어떻게됩니까? 예를 들어
: 가 다른 클래스가 다른 스레드에서 바로 후 old
요소를 제거하는 경우
class Worker
{
private readonly L<Something> _list;
public Worker(L<Something> list) { _list = list; }
private readonly object _lock = new object();
public void Replace(Something old, Something new)
{
lock (_lock)
{
if (_list.Contains(old))
{
_list.Remove(old);
_list.Add(new);
}
}
}
}
를 (그냥 타이핑을 저장, L<T>
는 스레드 안전 목록입니다 가정 해 봅시다) if
조건의 경우 목록에 더 이상 요소가 포함되지 않으며 _lock
은 개인 개체입니다.
실제 목록 인스턴스를 고정해야합니까?
고마워, 그건 내 질문에 대한 올바른 대답 : 자물쇠를 공유하는 일반적인 방법입니다. 나는 그 의미를 알고 있지만 내가 알지 못하는 세 번째 가능성이 있는지보기를 원했다. – Groo