如果我在一个线程上创建一个变量,然后使用ManualResetEvent
'sWaitOne()
方法阻塞,直到另一个线程为同一个变量分配一个值并发出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);