maintenant j'aimerai avoir un std::vector<POSIXMutex> gates;
je ne me rappelle plus les conditions necessaires (objet copiable?) pour
un vector.
et dans mon cas que dois je faire?
maintenant j'aimerai avoir un std::vector<POSIXMutex> gates;
je ne me rappelle plus les conditions necessaires (objet copiable?) pour
un vector.
et dans mon cas que dois je faire?
maintenant j'aimerai avoir un std::vector<POSIXMutex> gates;
je ne me rappelle plus les conditions necessaires (objet copiable?) pour
un vector.
et dans mon cas que dois je faire?
(Bruno Causse) writes:
> maintenant j'aimerai avoir un std::vector<POSIXMutex> gates;
> je ne me rappelle plus les conditions necessaires (objet
> copiable?) pour un vector.
CopyConstructible et Assignable. Ce qu'a priori une classe
mutex ne peut pas etre (la premiere chose que je me suis dite
en lisant ton message c'est que tu avais oublie de mettre en
prive ce constructeur et cet operateur).
PasDeS...@free.fr (Bruno Causse) writes:
> maintenant j'aimerai avoir un std::vector<POSIXMutex> gates;
> je ne me rappelle plus les conditions necessaires (objet
> copiable?) pour un vector.
CopyConstructible et Assignable. Ce qu'a priori une classe
mutex ne peut pas etre (la premiere chose que je me suis dite
en lisant ton message c'est que tu avais oublie de mettre en
prive ce constructeur et cet operateur).
(Bruno Causse) writes:
> maintenant j'aimerai avoir un std::vector<POSIXMutex> gates;
> je ne me rappelle plus les conditions necessaires (objet
> copiable?) pour un vector.
CopyConstructible et Assignable. Ce qu'a priori une classe
mutex ne peut pas etre (la premiere chose que je me suis dite
en lisant ton message c'est que tu avais oublie de mettre en
prive ce constructeur et cet operateur).
class POSIXMutex
{
[...]
private:
pthread_mutex_t mutex;
pthread_t tid;
maintenant j'aimerai avoir un std::vector<POSIXMutex> gates;
je ne me rappelle plus les conditions necessaires (objet copiable?) pour
un vector.
class POSIXMutex
{
[...]
private:
pthread_mutex_t mutex;
pthread_t tid;
maintenant j'aimerai avoir un std::vector<POSIXMutex> gates;
je ne me rappelle plus les conditions necessaires (objet copiable?) pour
un vector.
class POSIXMutex
{
[...]
private:
pthread_mutex_t mutex;
pthread_t tid;
maintenant j'aimerai avoir un std::vector<POSIXMutex> gates;
je ne me rappelle plus les conditions necessaires (objet copiable?) pour
un vector.
(Bruno Causse) writes:
Te definir une classe qui n'a pas ces contraintes, revoir la raison pour
laquelle tu penses avoir besoin d'un tableau, utiliser directement un
tableau a la C sont trois options. Difficile de donner *la* bonne
solution
quand on ne connait rien du probleme.
PasDeSpam@free.fr (Bruno Causse) writes:
Te definir une classe qui n'a pas ces contraintes, revoir la raison pour
laquelle tu penses avoir besoin d'un tableau, utiliser directement un
tableau a la C sont trois options. Difficile de donner *la* bonne
solution
quand on ne connait rien du probleme.
(Bruno Causse) writes:
Te definir une classe qui n'a pas ces contraintes, revoir la raison pour
laquelle tu penses avoir besoin d'un tableau, utiliser directement un
tableau a la C sont trois options. Difficile de donner *la* bonne
solution
quand on ne connait rien du probleme.
En revanche, un pointeur (pointeur nu ou shared_ptr<>) a une
sémantique de valeur, et peut être stocké dans un conteneur.
En revanche, un pointeur (pointeur nu ou shared_ptr<>) a une
sémantique de valeur, et peut être stocké dans un conteneur.
En revanche, un pointeur (pointeur nu ou shared_ptr<>) a une
sémantique de valeur, et peut être stocké dans un conteneur.
"Jean-Marc Bourguet" a écrit dans le message de news:(Bruno Causse) writes:
Te definir une classe qui n'a pas ces contraintes, revoir la raison pour
laquelle tu penses avoir besoin d'un tableau, utiliser directement un
tableau a la C sont trois options. Difficile de donner *la* bonne
solution
quand on ne connait rien du probleme.
j'ai une enorme table (2^24) de données (classe), que j'aimerai partager
entre plusieurs thread (lecture et ecriture)
plutot que bloquer l'acces a chaque operation (une seule porte d'entree),
j'ai prevu plusieurs portes (2^11).
l'index de la porte etant les 10 premiers bits de l index de la table.
la taille de la table et la quantité de porte doivent etre parametrable (a
la creation).
"Jean-Marc Bourguet" <jm@bourguet.org> a écrit dans le message de news:
pxbd4jdde0s.fsf@news.bourguet.org...
PasDeSpam@free.fr (Bruno Causse) writes:
Te definir une classe qui n'a pas ces contraintes, revoir la raison pour
laquelle tu penses avoir besoin d'un tableau, utiliser directement un
tableau a la C sont trois options. Difficile de donner *la* bonne
solution
quand on ne connait rien du probleme.
j'ai une enorme table (2^24) de données (classe), que j'aimerai partager
entre plusieurs thread (lecture et ecriture)
plutot que bloquer l'acces a chaque operation (une seule porte d'entree),
j'ai prevu plusieurs portes (2^11).
l'index de la porte etant les 10 premiers bits de l index de la table.
la taille de la table et la quantité de porte doivent etre parametrable (a
la creation).
"Jean-Marc Bourguet" a écrit dans le message de news:(Bruno Causse) writes:
Te definir une classe qui n'a pas ces contraintes, revoir la raison pour
laquelle tu penses avoir besoin d'un tableau, utiliser directement un
tableau a la C sont trois options. Difficile de donner *la* bonne
solution
quand on ne connait rien du probleme.
j'ai une enorme table (2^24) de données (classe), que j'aimerai partager
entre plusieurs thread (lecture et ecriture)
plutot que bloquer l'acces a chaque operation (une seule porte d'entree),
j'ai prevu plusieurs portes (2^11).
l'index de la porte etant les 10 premiers bits de l index de la table.
la taille de la table et la quantité de porte doivent etre parametrable (a
la creation).
J'ai l'impression que tu t'apprête à créer un lock par ligne.la taille de la table et la quantité de porte doivent etre parametrable
(a la creation).
Une technique pourrait être d'avoir un objet qui te donne le droit de
locker une portion de la table. Tu n'aurait donc pas un lock par ligne
mais un nombre de locks proportionnel au nombre d'accès simultanés à des
zones indépendantes. Et aussi ça te donne la possibilité de changer ta
politique de lock (ligne/colonnes/section...) et donc de tuner.
Si tu as beaucoup plus de lectures que d'écritures ça peut aussi valoir le
coup d'avoir un mécanisme de locks de lecture/locks d'écriture mais ça il
faut faire un benchmark.
J'ai l'impression que tu t'apprête à créer un lock par ligne.
la taille de la table et la quantité de porte doivent etre parametrable
(a la creation).
Une technique pourrait être d'avoir un objet qui te donne le droit de
locker une portion de la table. Tu n'aurait donc pas un lock par ligne
mais un nombre de locks proportionnel au nombre d'accès simultanés à des
zones indépendantes. Et aussi ça te donne la possibilité de changer ta
politique de lock (ligne/colonnes/section...) et donc de tuner.
Si tu as beaucoup plus de lectures que d'écritures ça peut aussi valoir le
coup d'avoir un mécanisme de locks de lecture/locks d'écriture mais ça il
faut faire un benchmark.
J'ai l'impression que tu t'apprête à créer un lock par ligne.la taille de la table et la quantité de porte doivent etre parametrable
(a la creation).
Une technique pourrait être d'avoir un objet qui te donne le droit de
locker une portion de la table. Tu n'aurait donc pas un lock par ligne
mais un nombre de locks proportionnel au nombre d'accès simultanés à des
zones indépendantes. Et aussi ça te donne la possibilité de changer ta
politique de lock (ligne/colonnes/section...) et donc de tuner.
Si tu as beaucoup plus de lectures que d'écritures ça peut aussi valoir le
coup d'avoir un mécanisme de locks de lecture/locks d'écriture mais ça il
faut faire un benchmark.
"Michael DOUBEZ" a écrit dans le message de news:
48c630a8$0$16587$J'ai l'impression que tu t'apprête à créer un lock par ligne.la taille de la table et la quantité de porte doivent etre parametrable
(a la creation).
Une technique pourrait être d'avoir un objet qui te donne le droit de
locker une portion de la table. Tu n'aurait donc pas un lock par ligne
mais un nombre de locks proportionnel au nombre d'accès simultanés à des
zones indépendantes. Et aussi ça te donne la possibilité de changer ta
politique de lock (ligne/colonnes/section...) et donc de tuner.
Si tu as beaucoup plus de lectures que d'écritures ça peut aussi valoir le
coup d'avoir un mécanisme de locks de lecture/locks d'écriture mais ça il
faut faire un benchmark.
je vois trois solutions a la synchronization de ma table.
1) un seul mutex : simplicité mais tres penalisant en perf
2) un mutex par entrée : simplicité mais tres penalisant en resource memoire
3) une table limité de mutex decoupant ma table en tranche : mix des deux
solutions precedentes
un ex sur un table de 16 elts (2^4) avec une table de mutex de 4 elts (2^2)
table[10] ------> 1010 donc lock du mutex 10 soit mutex[2]
les table[2], table[6], table[10] et table[14] sont inaccessibles tant que
le mutex est "locké".
"Michael DOUBEZ" <michael.doubez@free.fr> a écrit dans le message de news:
48c630a8$0$16587$426a74cc@news.free.fr...
J'ai l'impression que tu t'apprête à créer un lock par ligne.
la taille de la table et la quantité de porte doivent etre parametrable
(a la creation).
Une technique pourrait être d'avoir un objet qui te donne le droit de
locker une portion de la table. Tu n'aurait donc pas un lock par ligne
mais un nombre de locks proportionnel au nombre d'accès simultanés à des
zones indépendantes. Et aussi ça te donne la possibilité de changer ta
politique de lock (ligne/colonnes/section...) et donc de tuner.
Si tu as beaucoup plus de lectures que d'écritures ça peut aussi valoir le
coup d'avoir un mécanisme de locks de lecture/locks d'écriture mais ça il
faut faire un benchmark.
je vois trois solutions a la synchronization de ma table.
1) un seul mutex : simplicité mais tres penalisant en perf
2) un mutex par entrée : simplicité mais tres penalisant en resource memoire
3) une table limité de mutex decoupant ma table en tranche : mix des deux
solutions precedentes
un ex sur un table de 16 elts (2^4) avec une table de mutex de 4 elts (2^2)
table[10] ------> 1010 donc lock du mutex 10 soit mutex[2]
les table[2], table[6], table[10] et table[14] sont inaccessibles tant que
le mutex est "locké".
"Michael DOUBEZ" a écrit dans le message de news:
48c630a8$0$16587$J'ai l'impression que tu t'apprête à créer un lock par ligne.la taille de la table et la quantité de porte doivent etre parametrable
(a la creation).
Une technique pourrait être d'avoir un objet qui te donne le droit de
locker une portion de la table. Tu n'aurait donc pas un lock par ligne
mais un nombre de locks proportionnel au nombre d'accès simultanés à des
zones indépendantes. Et aussi ça te donne la possibilité de changer ta
politique de lock (ligne/colonnes/section...) et donc de tuner.
Si tu as beaucoup plus de lectures que d'écritures ça peut aussi valoir le
coup d'avoir un mécanisme de locks de lecture/locks d'écriture mais ça il
faut faire un benchmark.
je vois trois solutions a la synchronization de ma table.
1) un seul mutex : simplicité mais tres penalisant en perf
2) un mutex par entrée : simplicité mais tres penalisant en resource memoire
3) une table limité de mutex decoupant ma table en tranche : mix des deux
solutions precedentes
un ex sur un table de 16 elts (2^4) avec une table de mutex de 4 elts (2^2)
table[10] ------> 1010 donc lock du mutex 10 soit mutex[2]
les table[2], table[6], table[10] et table[14] sont inaccessibles tant que
le mutex est "locké".
1) un seul mutex : simplicité mais tres penalisant en perf
2) un mutex par entrée : simplicité mais tres penalisant en resource memoire
3) une table limité de mutex decoupant ma table en tranche : mix des deux
solutions precedentes
1) un seul mutex : simplicité mais tres penalisant en perf
2) un mutex par entrée : simplicité mais tres penalisant en resource memoire
3) une table limité de mutex decoupant ma table en tranche : mix des deux
solutions precedentes
1) un seul mutex : simplicité mais tres penalisant en perf
2) un mutex par entrée : simplicité mais tres penalisant en resource memoire
3) une table limité de mutex decoupant ma table en tranche : mix des deux
solutions precedentes
"Bruno Causse" writes:1) un seul mutex : simplicité mais tres penalisant en perf
D'accord, mais il faut d'abord que ça marche.2) un mutex par entrée : simplicité mais tres penalisant en resource memoire
3) une table limité de mutex decoupant ma table en tranche : mix des deux
solutions precedentes
Il suffit que deux fils accèdent à des tranches dans un ordre
différent pour finir en vérouillage mortel.
Donc ll faudra soit implémenter un système de transaction (avec
détection des verrouillages mortels et retour en arrière), soit ne
mettre qu'un verrou pour toute la table.
"Bruno Causse" <bcausse@lepoint.tm.fr> writes:
1) un seul mutex : simplicité mais tres penalisant en perf
D'accord, mais il faut d'abord que ça marche.
2) un mutex par entrée : simplicité mais tres penalisant en resource memoire
3) une table limité de mutex decoupant ma table en tranche : mix des deux
solutions precedentes
Il suffit que deux fils accèdent à des tranches dans un ordre
différent pour finir en vérouillage mortel.
Donc ll faudra soit implémenter un système de transaction (avec
détection des verrouillages mortels et retour en arrière), soit ne
mettre qu'un verrou pour toute la table.
"Bruno Causse" writes:1) un seul mutex : simplicité mais tres penalisant en perf
D'accord, mais il faut d'abord que ça marche.2) un mutex par entrée : simplicité mais tres penalisant en resource memoire
3) une table limité de mutex decoupant ma table en tranche : mix des deux
solutions precedentes
Il suffit que deux fils accèdent à des tranches dans un ordre
différent pour finir en vérouillage mortel.
Donc ll faudra soit implémenter un système de transaction (avec
détection des verrouillages mortels et retour en arrière), soit ne
mettre qu'un verrou pour toute la table.