다중 스레드에서 호출 할 수있는 public Action Update;
필드가 있습니다. 또한이 필드는 null로 변경할 수 있습니다. 속성을 만들고 내부에 lock 문을 사용해야합니까? 또는 내가 Update = new Action (...)
을 원자 적 연산으로 설정할 때 잠금이 필요하지 않습니까?작업 대리자 및 다중 스레드 동기화
0
A
답변
3
C#에서 참조를 설정하는 것은 원 자성 작업이므로 잠금이 필요하지 않습니다. 변경할 때 제대로 모든 스레드에 걸쳐 갱신되어 있는지 확인하기 Update
참조 휘발성해야하지만 :
public volatile Action Update;
에 관계없이 스레딩, 항상 회원을 직접 노출이 아니라 속성을 사용하지하는 것이 좋습니다. 그런 다음 자동 등록 배제 휘발성 재산에 대한 백업 저장소 확인해야합니다 :
private volatile Action update;
public Action Update
{
get { return update; }
set { update = value; }
}
4
이 앤더스에 의해 대답에 따라,하지만 당신은 당신이 할 경우 지역 변수에 일시적 변수의 값을 저장해야 경쟁 조건을 피하기 위해 null-check.
나쁜 예 :
if(myClass.Update != null)
{
// Race condition if Update is set to null here by another thread
myClass.Update();
}
좋은 예 :
var updateMethod = myClass.Update;
if(updateMethod != null)
{
// No race condition since we try to call
// the same value that we checked for null
updateMethod();
}
관련 문제
- 1. 다중 스레드 및 대리자 호출
- 2. 다중 스레드 및 스레드 동기화
- 3. 다중 스레드 및 Java 동기화
- 4. 다중 스레드 및 동기화 스레드 가시성
- 5. Java 다중 스레드 동기화
- 6. 다중 스레드 재귀 작업
- 7. fork() 다중 스레드 프로세스에서의 동기화
- 8. Java 다중 스레드 동기화 (객체)
- 9. JSP에서 다중 스레드 작업
- 10. 다중 스레드 작업
- 11. 제한된 다중 스레드 작업
- 12. 대리자 및 크로스 스레드 예외
- 13. 대리자 및 익명 함수가있는 스레드
- 14. 스레딩 및 스레드 선점 동기화
- 15. 스레드 동기화 및 중단
- 16. 자바 동기화 및 스레드
- 17. 스레드 스태틱 및 동기화
- 18. Clojure에서 다중 판독기/단일 작성자를위한 스레드 동기화
- 19. 자바의 다중 스레드 작업 스케줄러
- 20. 작업자 스레드 및 컨트롤러 스레드 동기화
- 21. 다중 스레드 작업 라이브러리, Threading.Timer 또는 스레드?
- 22. COM Interop 및 스레드 동기화
- 23. 다중 스레드 생산자/소비자 동기화 문제
- 24. 피라미드 : 다중 스레드 데이터베이스 작업
- 25. C에서 다중 스레드 디렉토리 작업
- 26. 다중 스레드 및 Sqlalchemy
- 27. 컬렉션 동기화 및 작업 중단
- 28. 서블릿의 스레드 안전 작업 및 대기열 작업
- 29. 프로듀서 - 소비자 다중 스레드 동기화 문제
- 30. Java : 다중 스레드 연결된 목록 액세스 동기화
1 : 멋진 대답! setter에서'= '를 잊어 버렸습니다. – Douglas
감사합니다. 다음과 같은 것이 필요하다고 느꼈습니다 :-) – zgnilec
대리인을 호출하기 전에 null을 확인할 때 가능한 경쟁 조건을주의하십시오. –