필자는 최근 스킵 목록 데이터 구조를 사용하여 동시 우선 순위 대기열을 구현하는 데 찔렀다.이 질문을 위해 스킵 목록이 무엇인지 모르는 경우 링크 된 목록을 그리는 것이 대답하기에 충분합니다. 가능한 한 빨리 잠금을 해제하고 Interlocked를 사용하여 목록을 트래버스하는 등의 최소한의 잠금을 시도했습니다 (즉, 여러 대기열 및 대기열에서 동시에 대기열 허용, 필요한 경우 노드 또는 순방향 포인터 잠금 만 가능).성능 향상을 위해보다 세분화 된 잠금이 더 좋은 시점은 언제입니까?
나는 결과에 만족했다. 그러나 syncroot lock으로 둘러싸인 추가 및 삭제 (즉, 주어진 시간에 하나의 작업 만 허용)로 일반 skiplist 작성은 실제로 두 배 빠릅니다.
구현에 버그가 있다고 가정했습니다. 그러나 Microsoft 웹 사이트에 나와 심지어 '동시 우선 순위 큐는'실제로 한 번에 하나의 작업을 허용 (예 : 대기열에서 주위 syncroot 잠금) 원칙적으로
(그리고 이 질문이 너무 일반적이라면 나를 용서해주십시오.), 어느 시점에서보다 세분화 된 잠금이 실제로 성능 향상으로 이어지나요? 필자는 실제로 Interlocked.Exchange (더 좋은 방법이 있습니까?)뿐만 아니라 여러 테스트 및 테스트 및 세트 등으로 큰 목록을 트래버스해야하므로이 경우 엔큐 및 대기열에서 제외됩니다.
또한 대부분의 시간을 어디에 사용했는지 확인할 수있는 도구가 있습니까? 감사.