shinji a écrit :
On a une variable cache : tableau de chaines unbounded_string.
Plusieurs taches partagent cette variable.
Le cache est protected pour eviter les acces concurrents
On a donc fait une fonction pour recuperer une chaine du cache et une procedure pour modifier le cache.
Toutefois on se demande si ca marche car la fonction renvoit un unbounded_string aui est en fait un pointeur sur la zone memoire.
Donc si une lecture est lancee, elle renvoit un pointeur sur l'espace memoire et si avant de lire le contenu pointe on a une procedure modifier alors la zone memoire sera modifiee.
On pense donc faire deux procedures. On se demande alors quel est l'interet des fonctions avec des protected vu que le probleme doit se rencontrer souvent.
En plus ca bloque tout le tableau cache.
Une autre solution serait de definir le cache comme un tableau de structures "contenu" et de mettre ces structures protected et non plus le cache. Et de definir pour une structure "contenu" une methode lecture et ecriture ?
Vous en pensez quoi ? Vous pouvez nous expliquer comment ca marche exactement le protected en ADA ???
Merci
|
Bouarf, qu'est-ce que tu fous la ?
Dans un protected, les fonction ne peuvent que lire, elles ne doivent rien modifier. Les procedures pourront modifier les variables du protected. La règle du langage est la suivante : il peut y avoir plusieurs fonctions en concurrence dans le protected mais une procédure sera toujours toute seule dedans, et le langage se démerde tout seul pour respecter la règle.
Le plus simple est de mettre en private ton tableau, une fonction de lecture et une procédure d'écriture. si ça peut te rassurer, les unbounded_string sont recopiées automatiquement par le langage à la sortie du tableau : c'est hyper lent mais t'es sur que tu va pas te la faire désallouer alors que tu bosses avec.