【发布时间】:2014-02-21 08:56:42
【问题描述】:
如果我在一个线程上创建一个变量,然后使用ManualResetEvent 的WaitOne() 方法阻塞,直到另一个线程将一个值分配给同一变量并发出EventWaitHandel 的信号。当我在第一个线程上读取变量时,我能保证总是得到另一个线程刚刚分配的值吗?
(我担心由于一些优化,我无法从 CPU 缓存中获取值,因为据我所知,我没有使用任何内存屏障)。
例如
var str = "multi-threading is hard!";
var mre = new ManualResetEvent(false);
Task.Factory.StartNew(() =>
{
str = Console.ReadLine();
mre.Set();
));
mre.WaitOne();
Console.WriteLine(str);
【问题讨论】:
-
你说你会使用
WaitOne()。在哪里?我希望它在 Console.WriteLine 之前。
标签: c# multithreading .net-4.0 event-wait-handle