Si un hilo Un genera otro hilo B con el único propósito de escribir a una variable V y luego espera a que termine, presentan memoria barreras necesaria para asegurar que las lecturas siguientes de V en la rosca A son frescos? No estoy seguro si existen barreras implícitas en las operaciones de terminación/unión que las hacen redundantes.¿Se requieren barreras de memoria para unir un hilo?
He aquí un ejemplo:
public static T ExecuteWithCustomStackSize<T>
(Func<T> func, int stackSize)
{
T result = default(T);
var thread = new Thread(
() =>
{
result = func();
Thread.MemoryBarrier(); // Required?
}
, stackSize);
thread.Start();
thread.Join();
Thread.MemoryBarrier(); // Required?
return result;
}
Se están bien/los dos (o más) de las barreras en el fragmento anterior requiere?
Dudo que se requiera una barrera de memoria. Si lo fueran entonces Thread. Join sería bastante inútil y mucha gente estaría en problemas. Join espera hasta que termina el hilo, lo que incluiría asignar el valor a la variable. – Despertar
Ver este hilo: http://stackoverflow.com/questions/6581848/memory-barrier-generators – Laurijssen