스레드가 서로 통신하는 방법은 무엇입니까? 그들은 서로의 가치를 사용하지 않는다. 그러면 그들 사이의 의사 소통 방법은 무엇인가?스레드가 서로 통신하는 방법은 무엇입니까?
7
A
답변
1
스레드는 값을 공유 할 수 있으며 그렇게 할 때주의해야합니다. .NET에서 가장 일반적인 메소드는 lock
문과 Interlocked 클래스입니다.
4
5
스레드가 서로 통신 할 수있는 몇 가지 방법이 있습니다. 이 목록은 철저하지는 않지만 가장 많이 사용되는 전략을 포함합니다.
- 공유 메모리 잠금 및 sempahores 같은 변수 또는 다른 데이터 구조 등
- 동기화 프리미티브
ManualResetEvent
또는
AutoResetEvent
공유 메모리 등
public static void Main()
{
string text = "Hello World";
var thread = new Thread(
() =>
{
Console.WriteLine(text); // variable read by worker thread
});
thread.Start();
Console.WriteLine(text); // variable read by main thread
}
동기화 프리미티브
public static void Main()
{
var lockObj = new Object();
int x = 0;
var thread = new Thread(
() =>
{
while (true)
{
lock (lockObj) // blocks until main thread releases the lock
{
x++;
}
}
});
thread.Start();
while (true)
{
lock (lockObj) // blocks until worker thread releases the lock
{
x++;
Console.WriteLine(x);
}
}
}
이벤트 이미 주어진 해답뿐만 아니라
public static void Main()
{
var are = new AutoResetEvent(false);
var thread = new Thread(
() =>
{
while (true)
{
Thread.Sleep(1000);
are.Set(); // worker thread signals the event
}
});
thread.Start();
while (are.WaitOne()) // main thread waits for the event to be signaled
{
Console.WriteLine(DateTime.Now);
}
}
+1
+1에 대한 완전성. –
관련 문제
- 1. 웹 응용 프로그램이 스트럿트에서 서로 통신하는 방법은 무엇입니까?
- 2. BES와 통신하는 방법은 무엇입니까?
- 3. Java 및 C 프로그램을 서로 통신하는 방법
- 4. 조치가보기와 통신하는 기본 방법은 무엇입니까
- 5. .NET EXE와 COM EXE간에 통신하는 방법은 무엇입니까?
- 6. Android에서 PC로 통신하는 방법은 무엇입니까?
- 7. 서버와 안드로이드간에 통신하는 방법은 무엇입니까?
- 8. Qt의 다른 스레드와 통신하는 가장 좋은 방법은 무엇입니까?
- 9. minicom이나 screen을 통해 pty와 통신하는 방법은 무엇입니까?
- 10. android phone에서 서버의 데이터베이스와 통신하는 방법은 무엇입니까?
- 11. iPhone을 소켓을 사용하여 서버와 통신하는 방법은 무엇입니까?
- 12. Mac과 iphone을 통신하는 가장 좋은 방법은 무엇입니까?
- 13. XML을 사용하여 네트워크에서 통신하는 방법은 무엇입니까?
- 14. 안드로이드에서 데이터베이스와 통신하는 더 좋은 방법은 무엇입니까?
- 15. 두 브라우저 창간에 통신하는 방법은 무엇입니까?
- 16. 장치와 직접 통신하는 Java 고유의 방법은 무엇입니까?
- 17. 두 응용 프로그램간에 통신하는 방법은 무엇입니까?
- 18. Zigbee를 사용하여 노트북과 통신하는 방법은 무엇입니까?
- 19. 안드로이드 타블렛에서 USB 장치와 통신하는 방법은 무엇입니까?
- 20. flex 4 + aspx를 직접 통신하는 방법은 무엇입니까?
- 21. 자바에서 여러 소켓을 통신하는 방법은 무엇입니까?
- 22. Bonjour와 통신하는 가장 좋은 방법은 무엇입니까?
- 23. 두 프로그램을 효율적으로 통신하는 방법은 무엇입니까?
- 24. 서비스 컨트롤러와 서비스/데몬간에 통신하는 방법은 무엇입니까?
- 25. iframe 페이지에서 호스팅 페이지와 통신하는 방법은 무엇입니까?
- 26. iOS에서 두 앱간에 통신하는 방법은 무엇입니까?
- 27. 분산 된 프로세스가 비동기 적으로 통신하는 가장 좋은 방법은 무엇입니까?
- 28. 백그라운드 스레드가 UI 스레드를 정지시키는 방법은 무엇입니까?
- 29. 대기중인 스레드가 어떤 모니터인지 보는 방법은 무엇입니까?
- 30. 스레드가 대기 상태인지 확인하는 방법은 무엇입니까?
, C#에서 어떻게 스레딩 작품 꽤 깊이있는 소개를 제공하는 무료 전자 책 여기를 확인 : [C# 스레딩에 대한 무료 전자 북] (http://www.albahari.com/threading/) – duesouth