나는 Interlocked.CompareExchange를 사용하여 더 빠르고 더 나은 방법을 알고 있지만 자물쇠에 국한되어 있다면 최선의 방법을 찾고 있습니다. 이전 값을 기준으로 두 개의 관련 필드를 수정하는 데 잠금을 사용하는 가장 효율적인 방법은 무엇입니까?
Joe Albahari says the following:
안전하게 그 이전의 값을 기반으로 새 ProgressStatus 객체를 할당 할 수도 있습니다
(예를 들어, 그것은 가능을 "증가"를 PERCENTCOMPLETE 값) - 코드의 하나 개 이상의 라인을 통해 잠금없이.
편집 : @ drch의 답변에 따라 업데이트 된 코드. 작은 \보다 효율적인 잠금을 사용하여이 작업을 수행 할 수 있는지 기다리는 중입니다. 이 락은 read, write 및 new 생성자를 모두 자물쇠에 가지고 있습니다. 더 작은 \보다 효율적인 잠금 장치를 원했습니다. 감사.
IncreaseProgress 만, 정확한 하나 개의 스레드에 의해 실행된다? 두 개의 스레드가 동일한 statusCopy를 캐시하는 경우 여러 스레드가 실행 중이면 업데이트가 느슨해 질 수 있기 때문입니다. – aKzenT
@ aKzenT 아니요. 많은 스레드가 한번에 IncreaseProgress를 호출한다고 가정합니다. 코드의 결함을 지적 해 주셔서 감사 드리며, 이것이 Joe Albahari가 이야기하고있는 하나의 라이너를 찾는 이유입니다. –
http://msdn.microsoft.com/en-us/library/dd78zt0c.aspx를 보셨습니까? –