Sincronización Flashcards

1
Q

Tipos de mutex.

A
  • mutex: mutex básico.
  • recursive_mutex: puede ser adquirido más de una vez por el mismo hilo.
  • timed_mutex: mutex no recursivo con operaciones con tiempo límite.
  • recursive_timed_mutex: mutex recursivo con operaciones con tiempo límite.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Operaciones mutex.

A
  • Construcción por defecto.
  • No se puede ni copiar ni mover.
  • Destructor solo válido si el mutex ha sido liberado.
  • Adquisición y liberación con lock, unlock y trylock (intenta adquirir mutex y si lo consigue informa con un mensaje de éxito).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

¿Para qué son útiles los recursive_mutex?

A

Son útiles para usarlos con funciones recursivas, con un mutex básico se quedan en deadlock.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

¿Qué son los mutex con tiempo límite (timed mutex)?

A

Son timed_mutex y recursive_timed_mutex: añaden operaciones de adquisición con especificación de tiempo límite.
- try_lock_for() y try_lock_until().

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

¿Ventajas de usar lock_guard?

A

lock_guardl{m} es una guarda que adquiere un mutex. Garantiza que el mutex está debidamente bloqueado aunque haya excepciones.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Construcción de unique_lock.

A
  • adquiere mutex: unique_lockl{m};
  • cerrojo asociado al mutex, pero no lo adquiere:
    unique_lockl{m, defer_lock};
  • construye cerrojo e intenta adquirirlo:
    unique_lockl{m, try_lock};
  • Asume que el mutex ya está adquirido por el hilo:
    unique_lockl{m}, adopt_lock};
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Operaciones de movimiento e intercambio de unique_lock.

A
  • unique_lockl{l2};
  • equivalente a l = move(l2);
  • l1.swap(l2);
  • swap(l1,l2);
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

¿Qué es un deadlock?

A

Un deadlock se produce cuando varios componentes adquieren el mismo conjunto de cerrojos, dependiendo del orden pueden interbloquearse.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

¿Qué es un cerrojo compartido?

A

Añadido en C++14, permite que haya múltiples lectores y un solo escritor.
El escritor usa: lock_guardl(m);
El lector: shared_lock_guardl(m);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly