List 개체의 Add 메서드를 호출하는 다중 스레드가 있고 독자가없는 경우 스레드 안전을 위해 추가를 호출하기 전에 List 개체를 잠그면됩니까?목록 <T> 다중 작성기 스레드 안전성
2
A
답변
3
보통은 별도의에 고정하는 것이 가장 좋습니다 (불변) 개체 ... 수정중인 동일한 개체에 잠금
은주의로 수행해야합니다.
을 수행해야합니다. 이 같은 기본 경우
private readonly object sync = new object();
private List<object> list = new List<object>();
void MultiThreadedMethod(object val)
{
lock(sync)
{
list.Add(val);
}
}
당신은 문제가을 가지고 있지만하지 않습니다 다음 목록은 변경 될 수있는 가능성 (안 목록의 내용,하지만 목록 자체),이 경우 두 개체를 잠그려고 할 때 두 개체를 잠그는 상황이 발생할 수 있습니다.
1
예, 잠글 필요가 있습니다. Instance methods are not guaranteed to be thread safe on List<T>
.
1
예. 그러나 Add 메서드를 통해 List 및 "new"를 서브 클래 싱하는 것을 고려할 수도 있습니다. 그러면 자물쇠를 캡슐에 넣을 수 있습니다. 아무것도 기본 목록에 액세스하지 않는 한 훌륭한 작동합니다. 이 기술은 XNA 비디오 게임의 간단한 트리 구조에 사용됩니다.
0
나는이가 여기에 이전에 연결되어 있다고 생각
,하지만 난 그들에게 매우 유용하고 흥미로운 발견 :
관련 문제
- 1. 사전의 스레드 안전성 <TKey, TValue>
- 2. 스레드 안전성
- 3. 스레드 안전성, 목록, 바인딩 및 WPF
- 4. Ruby/Rails 스레드 안전성
- 5. Windows 용 PHP 스레드 안전성 및 비 스레드 안전성
- 6. C의 스레드 안전성?
- 7. openssl BF_cfb64_encrypt 스레드 안전성
- 8. 스레드 안전성 ManualWorkflowSchedulerService.RunWorkflow
- 9. JSF의 스레드 안전성
- 10. NSMutableDictionary 스레드 안전성
- 11. BGL 스레드 안전성 향상
- 12. UI 스레드 안전성
- 13. 스프링 빈 스레드 안전성
- 14. 자바 스크립트의 스레드 안전성?
- 15. 스레드 안전성 및 C#
- 16. ASP.Net MVC의 스레드 안전성
- 17. iBatis SqlMapClient 및 스레드 안전성
- 18. 공유 인스턴스에서의 스레드 안전성 (C#)
- 19. templatetags에 대한 Django 스레드 안전성
- 20. SQL Server \ ORACLE 스레드 안전성
- 21. urllib2 및 cookielib 스레드 안전성
- 22. 변경할 키워드 및 스레드 안전성
- 23. OSGI ServiceTracker를 및 스레드 안전성
- 24. 스레드 안전성 및 MEF CompositionContainer
- 25. .NET에서 <4의 간단한 스레드 안전 목록 객체가 필요합니다.
- 26. 다중 판독기 스레드에서 배열 사용 + 작성기
- 27. 다중 포트를위한 다중 스레드?
- 28. 디자인 문제 : std :: map의 스레드 안전성
- 29. 스키마 유효성 검사 오류/XmlSchemaSet의 스레드 안전성?
- 30. 코어 데이터, 파일 다운로드 및 스레드 안전성
이것은 사실이 아닙니다. 악의적 인 관행은 다른 코드에 공개적으로 노출되어있는 객체를 잠그는 것입니다. 이 콜렉션이 공유된다면, 그렇습니다. 다른 코드가 당신을 감금 할 수 있기 때문에 락킹하는 것은 나쁜 습관입니다. 그러나 컬렉션이 완전히 포함 된 경우 동기화 할 수있는 좋은 후보인 경우 전화를 걸 수 있습니다. – codekaizen
@codekaizen : List *에서 수행 할 코드 *가 무엇인지 알지 못해 ... 참고가 누출 될 수 있습니다. 당신은이 대답이 옳지 않다고 말하는 것이 옳다. 개인 객체 사용에 대한 요점은 불변성에 관한 것이 아니라 내부의 데이터가 변경 되더라도 같은 모니터에서 잠글 것입니다. 그것은 다른 코드가 동일한 모니터에 액세스 할 수 있는지 여부와 자체 모니터에서 잠글 수 있는지 여부입니다. –
@codekaizen, 잘 "나쁜 연습"은 강한 레이블이지만, 요점은 같은 개체에 대한 잠금이 *주의 *로 수행되어야한다는 것입니다. – Kiril