Synchronisation et conditions de concurrence
Mettez en œuvre des mutex et des sémaphores pour gérer les ressources partagées en toute sécurité.
Synchronisation et conditions de concurrence est une leçon C Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C Academy comprend 3 leçons au total.
Synchronisation et conditions de concurrence
Lorsque plusieurs fils d’exécution accèdent à des ressources partagées, des conditions de concurrence peuvent survenir et entraîner des résultats imprévisibles.
Dans cette leçon, vous apprendrez :
- Ce que sont les conditions de concurrence et comment elles surviennent.
- Comment utiliser des mutex pour empêcher les conditions de concurrence.
- Comment les sémaphores aident à gérer les ressources partagées.

Qu’est-ce qu’une condition de concurrence ?
Une condition de concurrence survient lorsque plusieurs fils d’exécution accèdent simultanément à des données partagées, ce qui entraîne un comportement imprévisible.
Exemple :
- Deux fils d’exécution tentent de mettre à jour un compteur global.
- La valeur finale peut être incorrecte en raison des interférences.
Exemple : condition de concurrence en multithreading
Ce programme montre une condition de concurrence dans laquelle plusieurs fils d’exécution modifient une variable partagée.
#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;
}Empêcher les conditions de concurrence avec un mutex
Un mutex (exclusion mutuelle) garantit qu’un seul fil d’exécution accède à une ressource à la fois.
Fonctions de mutex :
pthread_mutex_init()- Initialise un mutex.pthread_mutex_lock()- Verrouille le mutex.pthread_mutex_unlock()- Déverrouille le mutex.pthread_mutex_destroy()- Détruit le mutex.
Exemple : utiliser un mutex pour empêcher les conditions de concurrence
Ce programme corrige la condition de concurrence en utilisant un mutex pour contrôler l’accès au compteur partagé.
#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’est-ce qu’un sémaphore ?
Un sémaphore est un compteur utilisé pour contrôler l’accès aux ressources.
Fonctions principales :
sem_init()- Initialise un sémaphore.sem_wait()- Diminue la valeur du sémaphore.sem_post()- Augmente la valeur du sémaphore.sem_destroy()- Détruit le sémaphore.
Exemple : utiliser des sémaphores pour la synchronisation
Ce programme utilise un sémaphore pour gérer l’accès à une ressource partagée.
#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;
}Bonnes pratiques pour synchroniser les fils d’exécution
Pour éviter les conditions de concurrence :
- Utilisez des mutex pour protéger les variables partagées.
- Utilisez des sémaphores pour gérer les ressources.
- Réduisez autant que possible l’utilisation des ressources partagées.
Résumé
Dans cette leçon, vous avez appris :
- Ce que sont les conditions de concurrence et comment elles surviennent.
- Comment utiliser des mutex pour empêcher les conditions de concurrence.
- Comment les sémaphores aident à gérer l’accès aux ressources partagées.
Cette leçon conclut la section consacrée au multithreading et à la concurrence en C !

Apprends C avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 39
- Leçons
- 144
Questions Fréquemment Posées
La leçon « Synchronisation et conditions de concurrence » est-elle gratuite ?
Oui — le texte complet de « Synchronisation et conditions de concurrence » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C Academy, passe à CoddyKit PRO. Le cours C Academy comprend 3 leçons au total.
Qu'est-ce que j'apprendrai dans « Synchronisation et conditions de concurrence » ?
Mettez en œuvre des mutex et des sémaphores pour gérer les ressources partagées en toute sécurité. Tu pratiques C Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C Academy ?
Aucune expérience préalable n'est requise. C Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 3.
Combien de temps prend la leçon « Synchronisation et conditions de concurrence » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C Academy ?
Oui. Chaque leçon C Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Introduction aux threads
- Création et gestion des threads
- Synchronisation et conditions de concurrence