¿cómo se comunican los hilos entre sí? no usan los valores de cada uno, entonces, ¿cuál es la forma de comunicación entre ellos?¿cómo se comunican los hilos entre sí?
Respuesta
Los hilos pueden compartir valores, solo tienen que tener cuidado al hacerlo. En .Net, los métodos más comunes son la instrucción lock
y la clase Interlocked.
"no usan valores entre sí" - bien dos hilos en el mismo proceso pueden ver variables comunes, por lo que es la appraoch más simple. Entonces usamos varias sincronizaciones, bloqueos, mutices y sempahores para esperar las condiciones y activar los hilos en espera.
En Java, utiliza varias primitivas, como la sincronización. Puede leer esto tutorial
+1 No entiendo por qué no se tiene en cuenta este hecho. – Luca
Hay algunas formas en que los hilos se pueden comunicar entre sí. Esta lista no es exhaustiva, pero sí incluye las estrategias más utilizadas.
- de memoria compartida, como una variable o alguna otra estructura de datos
- primitivas de sincronización, como cerraduras y sempahores
- eventos, como
ManualResetEvent
oAutoResetEvent
Memoria compartida
public static void Main()
{
string text = "Hello World";
var thread = new Thread(
() =>
{
Console.WriteLine(text); // variable read by worker thread
});
thread.Start();
Console.WriteLine(text); // variable read by main thread
}
primitivas de sincronización
public static void Main()
{
var lockObj = new Object();
int x = 0;
var thread = new Thread(
() =>
{
while (true)
{
lock (lockObj) // blocks until main thread releases the lock
{
x++;
}
}
});
thread.Start();
while (true)
{
lock (lockObj) // blocks until worker thread releases the lock
{
x++;
Console.WriteLine(x);
}
}
}
Eventos
public static void Main()
{
var are = new AutoResetEvent(false);
var thread = new Thread(
() =>
{
while (true)
{
Thread.Sleep(1000);
are.Set(); // worker thread signals the event
}
});
thread.Start();
while (are.WaitOne()) // main thread waits for the event to be signaled
{
Console.WriteLine(DateTime.Now);
}
}
+1 para completar. –
- 1. ¿Cómo se comunican los programas entre sí?
- 2. WPF MVVM: ¿Cómo se comunican ViewModels entre sí?
- 3. MS Access: ¿cómo se comunican los formularios entre sí los formularios?
- 4. ¿Cómo se relacionan los tipos básicos de Delphi entre sí?
- 5. Emuladores de Android 2 que se comunican
- 6. Objetos que se conocen entre sí
- 7. ¿HttpModule se comparte entre los hilos de trabajo?
- 8. .NET movimiento de hilos entre los núcleos
- 9. Dos clases que se refieren entre sí
- 10. ¿Las uniones discriminadas se refieren entre sí?
- 11. Estructuras que se refieren entre sí
- 12. Multicore + Hyperthreading: ¿cómo se distribuyen los hilos?
- 13. ¿Cómo puedo comunicarme entre hilos?
- 14. ¿Cómo se comunican las CPU en diferentes sockets?
- 15. ¿Cómo se comunican las aplicaciones de chat iOS?
- 16. Cómo determinar si dos sectores circulares se superponen entre sí
- 17. Dónde almacenar qué en un modelo MVC y cómo se comunican los componentes?
- 18. Diferencias entre SÍ/VERDADERO?
- 19. ¿Cómo se comparten los registros entre subprocesos?
- 20. Comunicación entre dos hilos
- 21. python: cómo enviar paquetes en múltiples hilos y luego el hilo se mata a sí mismo
- 22. cómo compartir una transacción entre varios hilos
- 23. Comprender cómo la aplicación delega y ve los controladores se relacionan entre sí
- 24. ¿Cómo newCachedThreadPool reutiliza los hilos?
- 25. C# comunicación entre hilos
- 26. ¿Cómo aborta AppDomain.Unload() los hilos?
- 27. cómo se comunican los programas - núcleo micro kernel exolénico exo kernel
- 28. ¿Cómo se comunican los mensajes/errores de la capa de servicio a capas superiores utilizando MVP?
- 29. Comunicación entre hilos en PySide
- 30. Compilación de C++ cuando dos clases se refieren entre sí
Además de las respuestas ya dadas, marque aquí para un libro electrónico gratuito dando toda una introducción en profundidad a cómo funciona la enhebrado en C# : [Libro electrónico gratuito sobre enhebrado de C#] (http://www.albahari.com/threading/) – duesouth