Sincronización y condiciones de carrera
Implemente mutexes y semáforos para gestionar recursos compartidos de forma segura
Sincronización y condiciones de carrera es una lección gratuita de C Academy en CoddyKit. Esta es la lección 3 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C Academy incluye 3 lecciones en total.
Sincronización y condiciones de carrera
Sincronización y condiciones de carrera
Cuando varios hilos acceden a recursos compartidos, pueden producirse condiciones de carrera que provoquen resultados impredecibles.
En esta lección, aprenderá:
- Qué son las condiciones de carrera y cómo se producen.
- Cómo utilizar mutexes para evitar condiciones de carrera.
- Cómo ayudan los semáforos a gestionar los recursos compartidos.

¿Qué es una condición de carrera?
¿Qué es una condición de carrera?
Una condición de carrera se produce cuando varios hilos acceden simultáneamente a datos compartidos, lo que provoca un comportamiento impredecible.
Ejemplo:
- Dos hilos intentan actualizar un contador global.
- El valor final puede ser incorrecto debido a la interferencia.
Ejemplo: condición de carrera en el multihilo
Ejemplo: condición de carrera en el multihilo
Este programa muestra una condición de carrera en la que varios hilos modifican una variable compartida.
#include <stdio.h>
#include <pthread.h>
int counter = 0;
void *incrementCounter(void *arg) {
for (int i = 0; i < 1000000; i++) {
counter++;
}
return NULL;
}
int main() {
pthread_t t1, t2;
pthread_create(&t1, NULL, incrementCounter, NULL);
pthread_create(&t2, NULL, incrementCounter, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
printf("Final counter value: %d\n", counter);
return 0;
}Cómo evitar condiciones de carrera con un mutex
Cómo evitar condiciones de carrera con un mutex
Un mutex (exclusión mutua) garantiza que solo un hilo acceda a un recurso cada vez.
Funciones de mutex:
pthread_mutex_init()- Inicializa un mutex.pthread_mutex_lock()- Bloquea el mutex.pthread_mutex_unlock()- Desbloquea el mutex.pthread_mutex_destroy()- Destruye el mutex.
Ejemplo: uso de un mutex para evitar condiciones de carrera
Ejemplo: uso de un mutex para evitar condiciones de carrera
Este programa corrige la condición de carrera mediante un mutex que controla el acceso al contador compartido.
#include <stdio.h>
#include <pthread.h>
int counter = 0;
pthread_mutex_t lock;
void *incrementCounter(void *arg) {
for (int i = 0; i < 1000000; i++) {
pthread_mutex_lock(&lock);
counter++;
pthread_mutex_unlock(&lock);
}
return NULL;
}
int main() {
pthread_t t1, t2;
pthread_mutex_init(&lock, NULL);
pthread_create(&t1, NULL, incrementCounter, NULL);
pthread_create(&t2, NULL, incrementCounter, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
pthread_mutex_destroy(&lock);
printf("Final counter value: %d\n", counter);
return 0;
}¿Qué es un semáforo?
¿Qué es un semáforo?
Un semáforo es un contador que se utiliza para controlar el acceso a los recursos.
Funciones principales:
sem_init()- Inicializa un semáforo.sem_wait()- Disminuye el valor del semáforo.sem_post()- Aumenta el valor del semáforo.sem_destroy()- Destruye el semáforo.
Ejemplo: uso de semáforos para la sincronización
Ejemplo: uso de semáforos para la sincronización
Este programa utiliza un semáforo para gestionar el acceso a un recurso compartido.
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
sem_t sem;
void *task(void *arg) {
sem_wait(&sem);
printf("Thread %d is executing\n", *(int *)arg);
sem_post(&sem);
return NULL;
}
int main() {
pthread_t t1, t2;
int id1 = 1, id2 = 2;
sem_init(&sem, 0, 1);
pthread_create(&t1, NULL, task, &id1);
pthread_create(&t2, NULL, task, &id2);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
sem_destroy(&sem);
return 0;
}Prácticas recomendadas para sincronizar hilos
Prácticas recomendadas para sincronizar hilos
Para evitar condiciones de carrera:
- Utilice mutexes para proteger las variables compartidas.
- Utilice semáforos para gestionar los recursos.
- Minimice el uso de recursos compartidos siempre que sea posible.
Resumen
Resumen
En esta lección, aprenderá:
- Qué son las condiciones de carrera y cómo se producen.
- Cómo utilizar mutexes para evitar condiciones de carrera.
- Cómo ayudan los semáforos a gestionar el acceso a los recursos compartidos.
Con esto concluye la sección sobre multihilo y concurrencia en C.

Preguntas frecuentes
¿La lección «Sincronización y condiciones de carrera» es gratis?
Sí — el texto completo de «Sincronización y condiciones de carrera» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C Academy, actualiza a CoddyKit PRO. El curso de C Academy incluye 3 lecciones en total.
¿Qué aprenderé en «Sincronización y condiciones de carrera»?
Implemente mutexes y semáforos para gestionar recursos compartidos de forma segura Practicas C Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C Academy?
No se requiere experiencia previa. C Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 3.
¿Cuánto tiempo toma la lección «Sincronización y condiciones de carrera»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C Academy?
Sí. Cada lección de C Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Introducción a los hilos
- Creación y gestión de hilos
- Sincronización y condiciones de carrera