나는 Concurrent Programming에 대한 Joe Duffy의 책을 읽었습니다. 나는 lockless threading에 관한 학문적 질문을 가지고있다. 먼저자주 변경되지 않는 변수에 대해 잠금을 사용하지 않아도됩니까?
가 : 내가이 있다고 가정 : 나는 그럼에도 불구하고
(당신이 저를 믿지 않는 경우, 메모리 모델에 대한 책에 섹션을 읽기) 잠금없는 스레딩은 위험이 따른다는 것을 알고, 나는 질문이 있습니다 클래스에 int 속성이 있습니다.
이 속성에 의해 참조 값
값이 변경됩니다 매우 드문여러 스레드에 의해 매우 자주 읽을 수 있습니다, 그리고 그렇게되면 그것을 변경하는 단일 스레드 될 것입니다. 이 비행에 사용하는 다른 작업이 아무도 손가락을 잃게 될하지 않습니다 동안 변경할 경우
는
내가 잠금을 사용할 수 있습니다 (이 수행하여 가장 먼저 누군가는 지역 변수에 복사입니다) (또는 동시 읽기를 유지하기 위해 readerwriterlockslim). 휘발성 변수를 표시 할 수 있습니다 (많은 경우 예제가 있습니다)
그러나 휘발성으로 인해 성능이 저하 될 수 있습니다.
변경시 VolatileWrite를 사용하고 읽음에 대한 액세스를 정상적으로 유지하면 어떨까요? 이런 식으로 뭔가 :
public class MyClass
{
private int _TheProperty;
internal int TheProperty
{
get { return _TheProperty; }
set { System.Threading.Thread.VolatileWrite(ref _TheProperty, value); }
}
}
나는 내가 실제 생활에서 이것을 시도 것이라고 생각하지 않는다,하지만 난 메모리 모델 물건을 이해 여부의 체크 포인트로, 무엇보다 (답에 대해 궁금 해요 나는 읽고 있었다).
에릭에게 감사드립니다. 그리고 저는 동의합니다. 두 번째 점은 잠금 장치가 필요하다면 올바르게하기가 얼마나 까다로운지를 증명합니다. 이것은 정말로 나를위한 학문적 인 운동이었습니다 - 저는 잠금 장치가없는 것을 피했습니다. 그러나, 뒤늦은 생각으로, 나는 이것이 정말로 가치있는 대화 였다고 생각합니다. 때때로 나는 왜 우리가 한 가지 또는 다른 것에 대해 잠글 수 없어야하는지/묻지 않았습니다. 나는 보통 "너 xxx를 생각해 봤어?" 이 대화 상자는 잠김없는 토론이 올 때 내 사례에 대한 더 많은 증거를 제공했습니다. 다들 감사 해요. – JMarsch