[英]how threads communicate with eachother?
线程如何与彼此通信? 他们不使用彼此的价值观,那么他们之间的沟通方式是什么?
线程可以通过几种方式相互通信。 此列表并非详尽无遗,但确实包含了最常用的策略。
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);
}
}
“他们不使用彼此的值” - 同一过程中的两个线程可以看到常见的变量,所以这就是简单的appraoch。 所以我们使用各种同步,锁定,mutices和sempahore等待条件并唤醒等待线程。
在Java中,您使用各种原语,例如同步。 你可以阅读本教程
线程可以共享值,这样做时只需要小心。 在.Net中,最常用的方法是lock
语句和Interlocked类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.