클래스에서 정적 ArrayList를 사용하여 업데이트 할 수없는 데이터베이스 필드에 대한 정보를 저장하고 있습니다. 한 번 (초기화 메서드 호출 생성자에서 잠금을 지키고) 생성자에서 초기화 할 계획이다. 그 후에 여러 스레드가 arraylist가 필드를 포함하는지 확인합니다. 이 읽기 액세스를 어떤 방식 으로든 제어해야합니까? 예를 들어, ArrayList.Synchronized를 호출하여.C# : 여러 스레드가 읽을 경우 ArrayList를 동기화해야합니까?
답변
아니요 (static
생성자에서 수행하는 경우에만 생성해야합니다. which has an implicit multithread lock - 그렇게 할 수없는 위치에있는 경우 잠금을 설정하는 것이 좋습니다). R/W 액세스를 필요로하는 경우 액세스를 제어하는 데 사용할 수 있다면 ReaderWriterLockSlim이 있습니다.
"... 그리고 그 중 하나를 생성 할 때도 필요하지 않습니다 ..."- 사실이 아니라면 하나 이상의 기계 언어 명령 사이클이 포함되어 있고 여러 스레드에서 충돌 할 수 있으므로 실제로 액세스 할 필요가 없습니다. 그것. –
@Charles : 좋은 점이 있습니다. (정적 생성자에 있어야한다고 말함) –
@Ruben, righto, static ctor는 문제를 해결할 수있는 방법입니다. .. 내 DV를 제거했습니다 ... –
아니요, 내가 읽고있는 한 그 책을 가지고있을 수 있습니다.
고맙습니다. 빠른 답변입니다. 여기에 키워드가 없다고 생각하십시오. 그렇지 않으면 답을 얻지 못했습니다. 응용 프로그램이 상당히 시간이 중요하기 때문에 액세스를 제어 할 필요가 없습니다. –
아니요. 동기화는 상태를 변경하려는 상태 보존 객체에만 필요합니다.
아니요. 스레드를 수정하지 못하도록 ReadOnlyCollection
에 배치하는 것이 좋습니다.
편집 : 그러나 이렇게하려면 ArrayList
대신 목록을 List<T>
으로 만들어야합니다.
목록을 처음 만들 때 정적 생성자를 사용할 수 있습니다. 이 유형에 대한 첫 번째 참조에서 한 번만 호출됩니다.
- 1. 캐시를 동기화해야합니까?
- 2. synchronizedCollection 및 contains - 수동으로 동기화해야합니까?
- 3. 스레드간에 어떻게 동기화해야합니까?
- 4. C#/MSAccess 프로젝트에서 테이블과 뷰를 어떻게 동기화해야합니까?
- 5. invokeAll 호출의 결과를 동기화해야합니까?
- 6. C# : 스레드가 파란 화면으로 크래시합니다.
- 7. 여러 스레드가 ReentrantReadWriteLock에 액세스하려고하면 어떻게됩니까?
- 8. automativ 스레드가 톰캣에서 시작하는 경우
- 9. WCF에서 목록을 어떻게 동기화해야합니까?
- 10. 이미 벡터가있는 경우 ArrayList를 동기화해야하는 이유는 무엇입니까?
- 11. C++에서 ArrayList를 어떻게 사용합니까?
- 12. Java에서 컬렉션을 수정하는 여러 스레드가 있습니까?
- 13. 스레드가 콘솔에서 대기중인 경우 .readline 스레드가 일시 중단 되었습니까?
- 14. 여러 원본 ArrayList를 단일 대상 목록에 동기화
- 15. 두 개의 스레드가 하나의 함수를 호출합니다.> 로컬 변수 액세스를 동기화해야합니까?
- 16. C# 스레드가 왜 죽을까요?
- 17. 여러 스레드가 사전을 수정할 수 있습니까?
- 18. 이전에 일어난 것을 보장하는 객체를 동기화해야합니까?
- 19. 여러 스레드가 내 메모리를 먹는 이유
- 20. performSelector : onThread : 대상 스레드가 차단 된 경우
- 21. 대기열 이전 스레드가 완료되지 않은 경우 스레드
- 22. 하나의 라이브러리가 멀티 스레드가 아닌 경우 어떻게해야합니까?
- 23. 스레드가 VCL 이벤트로 설정된 변수를 안전하게 읽을 수 있습니까?
- 24. 는 ArrayList를
- 25. ArrayList를 안드로이드
- 26. ArrayList를 검사
- 27. C# .NET을 프린트 아웃 형식의 ArrayList를
- 28. ArrayList를 (수집 <? extends E> C)
- 29. C# List는 언제 사용해야하며 언제 arraylist를 사용해야합니까?
- 30. asp.net C#에서 그리드에 arraylist를 바인딩하고 싶습니까?
MSDN은 친구입니다. "컬렉션이 수정되지 않는 한 ArrayList는 동시에 여러 독자를 지원할 수 있습니다." – RickNZ