Bonjour !
Tout est dans le titre !
Bonjour !
Tout est dans le titre !
Une section critique est une section de code dans laquelle il ne doit y avoir qu'un seul thread à la fois.
Un mutex est un objet utilisé dans le contexte de programmation multi thread qui permet de garantir que un seul thread ou un seul processus possèdera le mutex. En général, un mutex sert à protéger une ressource critique (l'accès à un modem, l'écriture dans une mémoire partagée, et bien d'autres choses).
Pour créer des sections critiques, on va les protéger par un objet qui va garantir qu'un seul thread se trouve a un instant donné dans cette section. L'objet qui va protéger la section critique peut être un mutex ou encore un sémaphore.
Plus d'informations générales ici et là
Donc si je comprend bien, un mutex protège des ressources (des variables uniquement ?) et une section critique du code en général ?
Une section critique protège du code qui ne doit être exécuté simultanément que par 1 seul thread (voir exemple plus bas).
Un mutex est un objet système qui ne peut être acquis que par un seul thread ou processus. Un mutex sert à protéger une ressource (hardware, variable, ...). Un mutex peut servir à créer une section critique.
Cette fonction exemple est écrite en pseudo code. Si la fonction function_clignotante() doit être exécutée simultanément par 2 threads ou plus, la variable variable_a_proteger doit être protégée par une section critique sinon, cela ne va par bien marcher, les 2 (ou plus) threads simultanés vont se marcher dessus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 void function_clignotante(void) { // variable statique à proteger static int variable_a_proteger = 0; // prendre la section critique // si on ne peut pas la prendre, le thread "dort" jusqu'à ce que la section critique soit libre à nouveau // c'est le noyau qui reveille le thread lorsque la section critique est disponible à nouveau enter_critical_section(); // a cet endroit, il est garanti qu'il n'y a qu'un seul thread dans le code // on peut donc travailler sur la variable sans problème if(variable_a_proteger == 0) { variable_a_proteger = 1; allumer_lampe(); } else { variable_a_proteger = 0; eteindre_lampe(); } // tres important, ne pas oublier de liberer la section critique // sinon, personne ne pourra plus travailler leave_critical_section(); }
Merci, je pense que c'est plus clair pour moi maintenant.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager