線程如何與其他線程進行通信?他們不使用彼此的價值觀,那麼他們之間的溝通方式是什麼?線程如何與對方通信?
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以確保完整性。 – 2010-08-13 16:38:41
相關問題
- 1. 對等通信線程
- 2. 線程通信
- 3. 線程通信
- 4. 進程與線程之間的通信
- 5. libgdx - junit測試 - 如何與應用程序線程通信?
- 6. 如何使用tcl線程作爲進程間通信方法?
- 7. 線程之間如何通信
- 8. 如何使內核線程通信?
- 9. EDT與主線程之間的通信
- 10. 無法與UI線程通信
- 11. Python的線程通信解決方案
- 12. 跨線程通信
- 13. 間通信,線程
- 14. 線程間通信
- 15. tkinter線程通信
- 16. CUDA線程通信
- 17. 如何使2個服務器線程與2個客戶端線程通信?
- 18. 如何與父線程通信已經調用了監聽器?
- 19. 如何使用共享資源與其他線程通信?
- 20. 如何與Ruby中的線程進行通信?
- 21. 如何使其ExecutorService中的線程與Runnable進行通信?
- 22. 如何在Android中有效地與UI線程進行通信?
- 23. 信號與線程
- 24. 與選擇的線程間通信的乾淨方式
- 25. 線程通信程序
- 26. 如何與SWF對象進行通信?
- 27. .Net線程與線程池vs任務串口通信
- 28. WCF服務工作線程與ServiceHost線程通信
- 29. 多線程,線程間通信,同步
- 30. 多線程Python:線程通信
除了已經給出的答案,在這裏獲得一個免費的電子書裏暗裏進行了深入的介紹瞭如何穿線工作在C# :[關於C#線程的免費電子書](http://www.albahari.com/threading/) – duesouth 2010-08-13 16:53:41