Bonjour,
Je suis confronté au problème suivant : je travaille sur un projet C++ conséquent. Ce projet fait appel à une bibliothèque C et en particulier à une fonction, dont je peux modifier le code, mais pas la signature. Cette fonction utilise une variable globale. Le code ressemble donc à ça :
Jusque là tout va bien. Sauf que dorénavant, ce programme va devenir un programme multi-thread, et chaque thread (y compris le thread principal du programme) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 int* maVariableGlobale; void maFonctionC( void ) { //J'utilise la variable globale if(maVariableLocale != NULL) printf("Variable = %d\n", *maVariableGlobale); }
- fera appel à maFonctionC ;
- devra conserver une valeur différente de cette variable globale.
Je vois pour l'instant une solution, qui serait d'utiliser le Thread Local Storage pour gérer cela. Avec la bibliothèque boost, ça donnerait par exemple le code suivant :
Je cherche une autre solution, qui passerait par une autre chose que TLS et pourquoi pas par du code lock-free.
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 boost:thread_specific_ptr<int> maVariableGlobale; void maFonctionC( void ) { //Je locke un mutex if(maVariableGlobale.get() != NULL) printf("Variable = %d\n", maVariableGlobale.get()); //Je relâche le mutex } void fonctionPrincipaleDeMonThread( void ) { //Je locke un mutex maVariableGlobale.reset(new int(1492)); //Je relâche le mutex }
Merci d'avance pour vos réponses.
Partager