2010-01-19 5 views
0

각 개체에 대해 의 목록을 가지고 있습니다. 나는 완전히 분리 된 스레드 (thread safty)를 실행하고 싶습니다. while 루프에서 개체를 선택하고 스레드를 실행합니다. 그리고 나서 다음 객체를 실행할 때 다음 스레드를 실행합니다 ... 모든 스레드는 공유되는 자원 (값/연결 (닫기/열기))이 변경되지 않아야합니다 .....스레드 동기화

+1

질문이 있습니까? –

답변

2

스레드 시작 object이 반드시 현명하지는 않습니다. 목록에서 항목을 선택하는 소수의 작업자 스레드 (또는 더 좋게는 Queue<T>)를 가지고 목록/대기열에 대한 액세스를 동기화해야합니다. 스레드 안전 큐의 예는 this thread에서 찾을 수 있습니다.

에 작업 항목이이되면 스레드 안전을 위해 작성 (처리)하는 코드의 나머지 부분을 만들기위한 마술 총알은 없습니다. 진정한 불변성 (아이템 이 될 수 없음) 또는 간단히 은 객체을 변경하지 않고 간단하게 유지할 수있는 합리적인 접근법입니다. 물론 작업 항목에 대한 잠금을 구현할 수도 있지만 모두 코드가 동일한 잠금 전략을 사용하는 경우에만 도움이됩니다. 이는 시행하기 어렵습니다.

0

나는 루프 동안 내 목록 에서 하나를 객체를 선택하고 스레드를 실행하고 정말 개체 당 스레드를 원한다면 는 다음 개체에 대해 다음 스레드

을 실행할 다음 들리, 그것은 TargetObject 속성의 설정, 각 개체에 대한 while 루프까지 새로운 ObjectProcessingThread에 그런

class ObjectProcessingThread 
{ 
Thread processingThread = new Thread(); 
public TargetObject { get; set;} 

public Start() 
{ 
    //start the processing thread with threadEntryPoint as the work the thread will do 
} 

private threadEntryPoint 
{ 
    //do stuff with targetObject 
} 
} 

: 아마,이 같은 클래스를 생성 할 수 없습니다 것 g 시작. 모든 스레드는 는 자원 (값/연결 ) (열기/닫기) 그들에 의해 공유가 변경하지 마십시오 그 동기화해야

.....

원하지 않는 경우 값을 변경하려면 변경하지 마십시오.