Saltar al contenido principal
Processes, IPC (including semaphores), scheduling, memory, I/O, file systems, virtualization, concurrency models, performance profiling, and the hardware-software interface.

Operating Systems

Processes, IPC (including semaphores), scheduling, memory, I/O, file systems, virtualization, concurrency models, performance profiling, and the hardware-software interface.

Concurrency Visualizer

Race Condition

Paso 0 / 0
Speed 100ms
Shared State —
Expected —
Locks Held 0
Status Ready
Playback Paused
Thread Lanes
Shared Memory
—
Mutexes
No locks in this scenario.
Event Timeline
—
Lost Update / Deadlock
No race or deadlock detected.
Step Explanation

Select a scenario and press Play to run the threads.

Wait-For Graph
No wait-for graph.
—
Pseudocode
 

Threads & Concurrency

Intermediate (3/5) ~1.5 horas Thread: unidad básica de ejecución Concurrency vs parallelism Race conditions y critical sections Sincronización: mutex, semáforos, condition variables Prereqs: Process Management
Quick Reference

race

No registry entry found for algorithm id "race". If this is a curriculum-only studio, the complexity and quick-reference panel is intentionally omitted.

Threads son unidades de ejecución dentro de un proceso que comparten el mismo espacio de direcciones. La concurrency permite múltiples threads progresando simultáneamente, pero introduce problemas de sincronización.

Threads vs Procesos

AspectoProcesoThread
Espacio de direccionesPrivadoCompartido
CreaciónLentaRápida
ComunicaciónIPCMemoria compartida
BloqueoTodo el procesoSolo el thread

Concurrency vs Parallelism

  • Concurrency: múltiples tareas progresando en el mismo CPU (interleaved).
  • Parallelism: múltiples tareas ejecutándose en CPUs distintos simultáneamente.

Race Condition

Ocurre cuando múltiples threads acceden a datos compartidos concurrentemente y el resultado depende del orden de ejecución.

Ejemplo:

counter = 0
thread 1: counter++ (read 0, increment 1, write 1)
thread 2: counter++ (read 0, increment 1, write 1)
Resultado esperado: 2
Resultado real: 1

Critical Section

Sección de código que accede a recurso compartido. Debe ejecutarse de forma mutuamente exclusiva: solo un thread a la vez.

Sincronización

Mutex (Mutual Exclusion)

Garantiza que solo un thread esté en la critical section a la vez.

lock(mutex)
  // critical section
unlock(mutex)

Semáforos

  • Binary semaphore: 0 o 1 (equivalente a mutex).
  • Counting semaphore: contador para múltiples recursos.
wait(sem)   // decrementa, bloquea si 0
signal(sem) // incrementa, desbloquea uno

Condition Variables

Permiten threads esperar hasta que una condición se cumpla.

wait(cv, mutex)  // libera mutex, espera señal
signal(cv)       // despierta un thread esperando

Problemas Clásicos

ProblemaDescripción
Productor-ConsumidorBuffer limitado, producir y consumir
Lectores-EscritoresMúltiples lectores o un escritor
Filósofos Cenadores5 filósofos, 5 tenedores

Aplicaciones

  • Servidores web — pool de threads para conexiones
  • Databases — concurrencia en transacciones
  • Sistemas de tiempo real — scheduling determinista
  • Enseñanza — introduce sincronización y race conditions

Trayectoria de Práctica

  1. Escribe un programa con race condition; ejecútalo muchas veces hasta ver el bug.
  2. Corrige con mutex; verifica que desaparece.
  3. Implementa productor-consumidor con semáforos.
  4. Investiga lock-free programming: ¿cómo evita locks?
  5. Investiga transactional memory: ¿es el futuro de concurrency?