Bloquer la main pour un thread
Bonjour,
Dans une application threadé, j'ai un code qui ressemble à celui-ci:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| void* mafctthread(void *arg) {
MaStruct* mastruct = (MaStruct*)arg;
printf("Voila ma structure:\n");
structure_afficher(mastruct);
return NULL;
}
int main() {
MaStruct mastruct1, mastruct2;
...
pthread_create(&threadid1, NULL, mafcttrhread, &mastruct1); // Appel par thread
mafctthread(&mastruct2); // Appel dans fil d'exécution
} |
Ainsi la fonction est exécutée deux fois en parallèle.
Le soucis, c'est que afficher la structure prends un certain temps.
Et donc, l'affichage est souvent "emmelé" entre les printf de la fonction dans le thread et celui dans le programme principal.
Comment faire pour qu'un thread monopolise la ressource ?
Par exemple, il faudrait faire quelque chose comme ça:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| void* mafctthread(void *arg) {
MaStruct* mastruct = (MaStruct*)arg;
bloquer(); // A partir de maintenant le thread à la main sur tt les autres
printf("Voila ma structure:\n");
structure_afficher(mastruct);
debloquer(); // Fin de la prioritée
return NULL;
} |
Merci.