あるスレッドで変数を作成した場合、別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);