Saltar al contenido

Lección 15 de 26 · Lectura y práctica

Quiz: Evaluación de conceptos de concurrencia en Go

Tipo de lección: QuizEvaluacion del moduloResponde estas preguntas para comprobar que puedes aplicar los criterios principales del modulo.

Del concepto a la práctica

Taller de esta lección

Este diagnóstico separa tres problemas: coordinación, seguridad de memoria y capacidad. Supón que dos goroutines incrementan una variable compartida 1.000 veces cada una sin sincronización. El resultado esperado conceptualmente es 2.000, pero el programa puede observar menos y el detector de carreras señalar el acceso.

Ejemplo resuelto

text
Escrituras concurrentes sin protección: carrera de datos
Resultado observado: no determinista
Corrección posible: mutex o canal con un único propietario

Un channel no arregla automáticamente una variable que ambas goroutines siguen escribiendo. Debes elegir quién posee el estado.

La corrección mínima usa el mismo mutex para todos los incrementos y espera a los dos trabajadores:

go
var mu sync.Mutex
var wg sync.WaitGroup
counter := 0
for worker := 0; worker < 2; worker++ {
    wg.Add(1)
    go func() {
        defer wg.Done()
        for i := 0; i < 1000; i++ {
            mu.Lock()
            counter++
            mu.Unlock()
        }
    }()
}
wg.Wait()
if counter != 2000 { panic("contador incorrecto") }

Es un fragmento dentro de una función y requiere import sync. Inclúyelo en una prueba *_test.go antes de ejecutar go test -race; ejecutar ese comando sin test no comprueba un caso escrito solo en prosa.

Pruébalo

  1. Ejecuta el caso varias veces con go test -race.

  2. Registra el contador final y el diagnóstico.

  3. Protege el incremento con un mutex.

  4. Repite la prueba y compara.

Error frecuente: concluir que un resultado correcto en una ejecución demuestra seguridad. Corrígelo ejecutando el detector de carreras y revisando el modelo de propiedad.

Comprueba tu resultado

La versión sin protección debe considerarse incorrecta aunque ocasionalmente muestre 2000; la versión protegida debe alcanzar 2000 y no producir advertencias de carrera. Explica qué mecanismo impide la escritura simultánea.

Diagrama de decisión con ramas Sí y No y un bucle que procesa cada elemento de una lista.
CursaloMapa de práctica
Cómo avanza un programa

Una condición decide qué camino ejecuta el programa. Un bucle repite una operación mientras queden elementos, y termina cuando la lista se agota. Separar ambas ideas ayuda a seguir el flujo y comprobar casos límite.

Ver la infografía en tamaño completo ↗

Tipo de lección: Quiz

Evaluacion del modulo

Responde estas preguntas para comprobar que puedes aplicar los criterios principales del modulo.

Sigue con Go para APIs de Alto Rendimiento: Construcción de Microservicios REST con gorilla/mux

Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.

Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.