Final 16 de Noviembre de 2017

De Cuba-Wiki

CAS

1. Explicar compareAndSwap y demostrar que su numero de consenso es

2. Desarrollar ReentrantLock que soporte locks recursivos

COMMIT

1. Definir el problema de consenso COMMIT sin fallas

2. Dar una solución

SETUID

Explicar que es el bit de SETUID. Dar un ejemplo de uso.

FIFO Queue

1. Explicar por qué la implementación de una cola FIFO no es correcta.

atomic<int> tail, head = 0;
int capacidad = N;
T[] items = new T[N];
void queue(x){
  assert(!full());
  items[tail.getAndInc() % capacidad] = x;
}
T deque(){
  assert(!empty());
  T x = items[head.getAndInc() % capacidad];
  return x;
}
bool full(){return tail.get() - head.get() == capacity};
bool empty(){return tail.get() - head.get() == 0};

2. Dar una implementación correcta wait-free para 1 productor y 1 consumidor.