De la discusión que he visto parece que la operación atómica y la seguridad de los hilos son lo mismo, pero mucha gente dice que son diferentes. ¿Alguien puede decirme la diferencia si hay una?
c#
programming-languages
multithreading
usuario960567
fuente
fuente
Respuestas:
Las operaciones atómicas son una forma de lograr la seguridad del subproceso, ya sea mediante el uso de algún tipo de bloqueos como Mutexes o semáforos que utilizan operaciones atómicas internamente o mediante la implementación de sincronización sin bloqueo mediante cercos atómicos y de memoria.
Por lo tanto, las operaciones atómicas en tipos de datos primitivos son una herramienta para lograr la seguridad de subprocesos, pero no garantizan la seguridad de subprocesos automáticamente porque normalmente tiene múltiples operaciones que dependen unas de otras. Debe asegurarse de que estas operaciones se realicen sin interrupción, por ejemplo, utilizando Mutexes.
Sí, escribir uno de estos tipos de datos atómicos en c # es seguro para subprocesos, pero eso no hace que la función que usa en subprocesos sea segura. Solo asegura que la escritura única se ejecute correctamente incluso si un segundo hilo accede a ella "al mismo tiempo". Sin embargo, la siguiente lectura del hilo actual no está garantizada para obtener el valor previamente escrito como un hilo diferente podría haberlo escrito, solo que el valor leído es válido.
fuente
La atomicidad y la seguridad del hilo son dos cosas diferentes. La atomicidad se refiere a la calidad de "todo o nada" de una operación; Si una operación no se puede realizar con éxito al 100%, el sistema debe permanecer en el estado general en el que se encontraba antes de que comenzara cualquier parte de la operación. El ejemplo clásico es una transacción de base de datos; Al guardar una factura, incluido su encabezado y varias líneas de pedido, cada parte de cada fila de la base de datos debe colocarse correctamente; si no, los datos se pierden o se corrompen. Si no se puede insertar una línea de pedido, no solo se deben insertar otras filas restantes, sino que ninguna de las filas ya procesadas debe permanecer.
La seguridad de subprocesos se refiere a una combinación de cosas, incluida la atomicidad, que permite que una operación sea "reentrante"; varios trabajadores pueden realizar la misma operación, comenzando en el mismo momento o en diferentes momentos, sin efecto en ningún otro. Hay muchos modelos para una operación segura para subprocesos; la mayoría de ellos se reducen conceptualmente a ejecutar múltiples tareas paralelas en completo aislamiento (dos trabajadores pueden realizar la misma tarea en dos objetos diferentes o colecciones de objetos sin siquiera saber que el otro trabajador existe), o establecer una "tubería" dentro de la cual varios trabajadores realizan una tarea de una operación completa (o bien cada trabajador progresa de la primera tarea a la siguiente y así sucesivamente, o bien se enfoca en una tarea y entrega su "producto de trabajo" intermedio al siguiente trabajador).
fuente
Una operación atómica es una operación que no puede ser interrumpida.
Un subproceso seguro es un subproceso que se puede interrumpir de forma segura.
La seguridad de subprocesos se obtiene con operaciones atómicas, en particular en la lógica que evita que se acceda a recursos críticos varias veces.
La operación atómica básica es Test-and-set , que se usa para implementar semáforos, que a su vez se usan para implementar seguridad de subprocesos.
fuente
La seguridad de subprocesos es más un marco o un "concepto", la operación atómica es un subconjunto, un medio (uno de muchos) para alcanzar el estado de clasificada como "segura para subprocesos".
La seguridad de subprocesos se refiere a un proceso al que se puede acceder mediante subprocesos separados, donde el acceso de uno (y la manipulación de datos) no corromperá la integridad de la operación del otro.
Gran parte de la habilidad del programador es saber cómo lograr esto, dependiendo de la situación y el objetivo clave, es posible que deba implementar, por ejemplo: bloqueos, semáforos, pestillos, objetos atómicos, reglas de sincronización, etc.
fuente