Если я создаю переменную в одном потоке, то блокируйте с помощью метода WaitOne()
, пока другой поток не присваивает значение той же переменной и не сигнализирует EventWaitHandel
. Когда я приступаю к чтению переменной в первом потоке, я гарантированно всегда получаю значение, просто назначенное другим потоком?Перечисляются ли переменные из одного потока «поточно-безопасные» при чтении из другого потока, если используется EventWaitHandel?
(боюсь, я не смог получить значение из кэша процессора из-за некоторой оптимизации, поскольку, насколько я знаю, я не использовал никаких барьеров памяти).
например.
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. – Georg
yup, спасибо за это – markmnl