2009-04-07 2 views
0

C#에서 클래스 필드는 모든 스레드가 해당 객체의 인스턴스를 소유한다는 것을 의미합니다.인스턴스 필드 및 스레드 오리진의 안전성에 대한 질문

예. 스레드 1은 객체 b와 같이 객체 a의 자체 인스턴스를 갖습니다.

서로 다른 PC의 웹 응용 프로그램 사용자가 서로 다른 스레드 아래에서 인스턴스 필드 (컬렉션 말하기)에 액세스해야합니다. 그렇습니까?

이 질문을 통해 컬렉션을 동기화하기 위해 코드를 작성해야하는 이유는 무엇입니까? 컬렉션이 인스턴스 기반이며 공유 상태가 아닌 경우

상태를 수정할 때 컬렉션을 읽으려는 다른 스레드가있을 수 있습니다. 내가 "실제로 쓰는 코드를 통해 가능한 경우 일 뿐이니까"라고 말하는가? 예 : 하나의 스레드를 생성하여 동기화되지 않은 콜렉션을 읽고 원래 스레드를 사용하여 콜렉션에 기록하십시오. 아니면 다른 문제가 있습니까?

이것은 기본적인 질문 인 것처럼 초급 섹션에 넣었습니다.

감사

C#에서

답변

2

, 기본적으로 클래스는 각 개체의 고유 인스턴스의가 없습니다.

클래스 인스턴스와 스레드는 두 개의 별도 구성입니다 (단, [ThreadStatic] 또는 일부 예외가 지정되지 않은 경우). 인스턴스를 작성한 후 별도의 스레드를 실행하면 별도의 스레드가 오브젝트의 자체 인스턴스를 작성하지 않는 한 동일한 인스턴스에서 작업하게됩니다.

일반적으로 스레드는 데이터와 상태를 공유하기 위해 동일한 인스턴스에서 작동하므로 적절하게 동기화해야합니다.

스레드가 절대로 개체의 상태 또는 인스턴스를 공유하지 않으면 동기화에 대해 걱정할 필요가 없습니다. 실제로는 드문 경우입니다. 일반적으로 스레드는 일부 유형의 공유 데이터에서 작동합니다. 스폰 된 각 스레드가 자체 개체를 만들고 다른 스레드와 대화를하지 않으면 동기화를 무시할 수 있습니다.

+0

내 이해에서 정확히 무엇을 놓치고 있는지. 이론 주셔서 감사! – dotnetdev

+0

문제 없어요 :) 다행이 도울 수 있습니다. –

관련 문제