En este libro en línea enhebrar: http://www.albahari.com/threading/part4.aspxentendimiento sincronización de hilos de bloqueo y no Thread.MemoryBarrier
theres un ejemplo de Thread.MemoryBarrier()
class Foo
{
int _answer;
bool _complete;
void A()
{
_answer = 123;
Thread.MemoryBarrier(); // Barrier 1
_complete = true;
Thread.MemoryBarrier(); // Barrier 2
}
void B()
{
Thread.MemoryBarrier(); // Barrier 3
if (_complete)
{
Thread.MemoryBarrier(); // Barrier 4
Console.WriteLine (_answer);
}
}
}
Tenemos una discusión si existe algún bloqueo hilo pasando o no?
Im pensar que hay algunos, sobre todo teniendo en cuenta que
Una valla completa dura alrededor de diez nanosegundos en un escritorio 2010 de la era.
Por otra parte, cerca completo solamente se supone que disable instructions reodering and caching
que por su sonido no califica como bloqueo de rosca, (a diferencia lock
donde es claro que para otro hilo espera para liberar el bloqueo antes de que continúe, y se bloquea durante ese tiempo)
Acerca de ese hilo 'estado de bloque'. Estoy hablando no en términos de si el hilo se pone en estado bloqueado o no, pero si hay alguna sincronización de hilo que ocurre, lo que significa que un hilo no se puede ejecutar mientras que otro no lo permite, por medio de MemoryBarrier en este caso.
También me gustaría obtener una idea clara de lo que logra cada barrera. Por ejemplo, Barrier 2: ¿cómo proporciona exactamente la garantía de frescura y cómo está conectada a la barrera 3? Si alguien explicara en detalle cuál es el propósito de cada barrera aquí (lo que posiblemente podría salir mal si 1 o 2 o 3 o 4 no estuvieran allí) creo que puedo mejorar mi comprensión de esto en gran medida.
EDITAR: es bastante claro ahora lo que 1, 2 y 3 hacen. Sin embargo, lo que 4 no hace 3 no está claro.
seguro que no implica que directamente, solo pensé que podría considerarse como una evidencia, es lógico que el comando tome tiempo para ejecutarse. –
@Valentin Se podría considerar evidencia, pero simplemente no es el caso aquí :) – dlev
bien, vea mi edición al final de la pregunta, y mientras estamos en esto, ¿la declaración de bloqueo pone un hilo en estado bloqueado (solo para aclarar ese hilo bloqueó la definición de estado)? –