스레드 안전성은 클래스를 인스턴스화하고 해당 메소드를 사용하여 스레드 수정을 시작할 때 그렇게 중요하지 않습니까? 여러 스레드가 같은 개체 인스턴스에 액세스하는 경우스레드 안전성은 언제 문제가됩니까?
답변
는, 당신은 스레드 안전을 보장하기 위해 잠금 추가해야합니다 : 당신은 .NET 4를 사용하는 경우 보조 노트로
// make sure that this is defined *outside* the method
// so that all threads lock on the same instance
private readonly object _lock = new object();
...
// add a lock inside your event handler
proc.OutputDataReceived += (object sendingProcess, DataReceivedEventArgs e) =>
{
if (e.Data != null)
{
lock (_lock)
info.additional += e.Data;
}
};
을, 당신은 확인 할 수 있습니다 ConcurrentQueue
클래스 그것은 여러 스레드가 동시에 자신의 항목을 대기열해야하는 경우 유용 할 수있는 FIFO 버퍼의 스레드 안전 구현의 :
private ConcurrentQueue<SomeInfo> _queue = new ConcurrentQueue<SomeInfo>();
...
proc.OutputDataReceived += (object sendingProcess, DataReceivedEventArgs e) =>
{
if (e.Data != null)
{
// no need to lock
_queue.Enqueue(e.Data);
}
};
을 별도의 스레드에서 항목을 큐에서 제거하려면 다음을 사용 :
SomeData data = null;
while (_queue.TryDequeue(out data))
{
// do something with data
}
여러 스레드가 액세스하지 않습니다. 같은 대상. 각 스레드에 대한 프로세스를 시작하는 클래스의 인스턴스 만들기 –
대기열에 문제가 없습니다. 내가 생각하는 출력 재 지정입니다. –
@Joey : 이것을 이벤트 처리기에 추가합니다 :'Console.WriteLine (System.Threading.Thread.CurrentThread.ManagedThreadId);'. 나는 당신이 다른 쓰레드 ID를 콘솔에 쓰도록해야한다고 생각한다. – Groo
- 1. 스레드 안전성은 어떻게됩니까?
- 2. RIA에서 지연로드는 언제 문제가됩니까?
- 3. 이 인코딩은 앞으로 문제가됩니까?
- 4. 각 스레드 동기화 객체는 언제 사용해야합니까?
- 5. 스레드 이름 - 언제 알 필요가 있습니까?
- 6. 부스트 스레드 조인 기능을 언제 사용합니까?
- 7. 지리적 인 거리가 여전히 문제가됩니까?
- 8. SQL Server INNER JOIN이 문제가됩니까?
- 9. 다른 나라 사람들에게 영어 보안 문자가 문제가됩니까?
- 10. iOS 응용 프로그램에서 스레드 안전성에 대해 언제 걱정해야합니까?
- 11. NSOperation 객체 (스레드 환경)의 비 원자 속성, 언제 사용합니까?
- 12. performSelectorOnMainThread 호출은 언제 실행됩니까?
- 13. 언제 예상하고 언제 스텁을합니까?
- 14. 언제
- 15. 언제
- 16. 언제
- 17. 정적 메서드 및 스레드 안전
- 18. 단일 스레드 - 멀티 스레드 응용 프로그램
- 19. 언제 asp.net의 스레드가 종료됩니까?
- 20. Objective-C 런타임 함수에 대한 스레드 안전성을 보장합니까?
- 21. 은 JPanel에 구성 요소를 추가 할 때 문제가됩니까?
- 22. 다른 asp.net FormView 템플릿에서 동일한 ID를 사용하는 것이 문제가됩니까?
- 23. 여러 개의 수용 소켓이 동일한 OpenSSL 컨텍스트를 사용하는 경우 문제가됩니까?
- 24. 작은 MVC 프로젝트에 SQL Server Express를 사용하는 것이 문제가됩니까?
- 25. 사이트에서 이상한 리디렉션 문제가 발생하면 항상 서버 문제가됩니까?
- 26. iframe 때문에 많이 변하지 않는 URL을 갖는 것이 문제가됩니까?
- 27. 언제 자신의 컨트롤러에서 기능을 사용할 수 있습니까?
- 28. 언제 레이아웃을 사용하고 활동을 언제 사용합니까?
- 29. C# List는 언제 사용해야하며 언제 arraylist를 사용해야합니까?
- 30. 언제 NSDocument를 연장해야합니까? NSWindowController를 언제 연장해야합니까?
무엇 오브젝트의 종류는 정보인가? –
수정 사항을 참조하십시오. –
이것이 도움이 될지 확실하지 않지만 여기에 게시 된 답변을 확인하십시오. http://stackoverflow.com/questions/5187568/delays-when-reading-process-output-asynchronously/5187715#5187715 –