문제

Enqueue/Dequeue 메소드를 호출 할 때 동기화 된 큐를 만들었고 해당 대기열의 Syncroot 속성에 Synclock을 사용하고 있습니다. 이 방법은 표준 생산자/소비자 클래스 사례에서 호출됩니다.

Syncroot 속성의 적절한 사용입니까?

각 클래스에서 개인 공유 객체를 만들고 대신 잠그는 것이 더 나은 연습일까요?

당신의 추론을 설명 해주세요.

도움이 되었습니까?

해결책

그렇습니다. 바로 그게 바로 그 것입니다 SyncRoot 속성은 용입니다. 특히 다른 "래퍼"컬렉션이 생성되면 아마도 동일하게 사용한다는 것을 의미합니다. SyncRoot, 따라서 모든 사람이 여전히 올바르게 동기화 할 수 있습니다.

~할 수 있었다 자신만의 잠금 객체를 만들면 다른 사람이 동시에 잠겨 있지 않도록 할 수 있습니다. 그러나 그것은 또한 다른 코드를 의미합니다. 할 수 없었습니다 동일한 컬렉션으로 안전하게 작업하십시오. 실제로 시나리오에 따라 다릅니다. 다른 코드가 동일한 컬렉션을 사용할 수 있습니까? 다른 코드가 귀하의 통제하에 있습니까?

자물쇠를 꺼내야합니다 모두 Enqueue/Dequeue뿐만 아니라 작동. 특히, 컬렉션을 반복하려면 중간의 변화가 반복자를 무효화 할 것이므로 해당 시간 동안 잠금 장치를 고정해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top