Multiproceso (.net)
Detener o reiniciar un hilo configurando una señal
AutoResetEvent activa un hilo a la vez, mientras que ManualResetEvent activa varios hilos a la vez.
AutoResetEvent.WaitOne() solo permite la entrada de un subproceso a la vez. Cuando un subproceso recibe una señal, AutoResetEvent configurará automáticamente la señal para que no se envíe y otros subprocesos que llamen a WaitOne deben continuar esperando.
Cuando un subproceso llama a ManualResetEvent.Set(), ManualResetEvent continuará enviando señales a menos que se llame manualmente a ManualResetEvent.Reset(), y otros subprocesos que llamen a WaitOne obtendrán la señal y continuarán con la ejecución.
Proporciona operaciones atómicas sobre variables que pueden ser realizadas por múltiples subprocesos.
Una declaración es de naturaleza atómica si se trata como una única instrucción indivisible en el procesador subyacente. La atomicidad estricta impide cualquier posibilidad de preferencia. Las lecturas y escrituras simples en campos de 32 bits (o inferiores) son siempre atómicas. Las operaciones en campos de 64 bits son atómicas solo en un entorno de ejecución de 64 bits, y las declaraciones que combinan múltiples lecturas y escrituras no son necesariamente atómicas:
Se deben usar constantes Lógica de comparación después del intercambio, porque el uso de variables y lecturas las variables no son necesariamente atómicas (use Interlocked.Exchange para juzgar lógicamente que el modo de depuración es inconsistente con el modo de lanzamiento)
¿Cuándo se debe usar volátil en C#?
Sayonara volatile
c# - Uso de palabras clave volátiles frente a bloqueo
Comprender el impacto de las técnicas de bloqueo bajo en aplicaciones multiproceso
Bloqueos de verificación dual (inicialización diferida):
Usa valores booleanos para indicar la inicialización
WaitHandle.AutoResetEvent y ManualResetEvent
ManualResetEvent
volátil
Comentarios entrelazados de C#
Clase entrelazada
ReaderWriterLockSlim
Clase ThreadPool
ThreadPool.QueueUserWorkItem
WaitHandle.WaitAll
Colección segura para subprocesos de C#
Por qué Redis elige un modelo de subproceso único [Nota: análisis de puntos clave en el campo de conocimiento de Redis]