Consistencia Flashcards
¿Qué es un objeto?
Es una región de almacenamiento en la memoria. Es una secuencia de uno o varios bytes.
¿Qué es una posición de memoria?
Es un objeto de un tipo escalar (tipos simples de C++) o una secuencia de campos de bits adyacentes.
Campos de bits.
Indica cuántos bits se usan en cada campo. Cada campo es una posición de memoria independiente.
Reglas de concurrencia.
- 2 hilos pueden acceder a posiciones de memoria distintas de forma simultánea.
- 2 hilos pueden acceder a la misma posición de memoria de forma simultánea si ambos accesos son de lectura.
- Si los accesos son simultáneos y al menos uno de ellos es de escritura, existe condición de carrera potencial.
¿Qué son las operaciones atómicas?
Son operaciones que no tienen estados intermedios (operaciones indivisibles). Solo tienen posibilidad de estado inicial y final, por lo que pueden servir para prevenir las carreras de datos sin usar mutex. Permiten definir un orden de ejecución.
Orden de modificación.
Secuencia de escrituras sobre un objeto.
Uso del tipo atómico.
Tipo genérico atomic: para enteros, punteros y boool (no está definido para float y double). Tipo atomic_flag (asegura que la implementación es libre de cerrojos).
Uso de atomic_flag.
- Dos estados posibles: activado o desactivado.
- iniciación:
std: :atomic_flag f1 = ATOMIC_FLAG_INIT; - desactivar: f1.clear();
- activar y comprobar valor previo: f1.test_and_set();
Consistencia secuencial.
- memory_order_seq_cst
- El programa es consistente con una vista secuencial.
- El comportamiento es como si todas las operaciones se realizasen en algún orden particular en un único hilo.
- No puede haber reordenaciones.
- Costoso en rendimiento.
Órdenes secuencialmente no consistentes.
- No hay orden global de eventos (cada hilo puede tener una vista distinta).
- Todos los hilos deben de estar de acuerdo en el orden de modificación de las variables.
- Ordenamiento relajado
- Ordenamiento adquisición liberación.