Bonjour,

J'ai un message d'erreur concernant cette directive dans l'example simplifié ci-dessous.
Le message est "r declared 'threadprivate' after first use"
Ca vient du fait que ma classe a un constructeur mais ca je n'y peut rien.
Cet operator est appelé dans une boucle parallélisée et qui merde parce va variable stratic 'r' est commune aux threads, d'ou la tentaative d'utilisation de la directive "threadprivate"

Je ne sais pas comment faire autrement.

Merci de vos suggestions
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
 
 
class  my_class
{
 public :
  double x,y;
  my_class() { x=y=0; }
};
 
 
my_class&  my_class::operator*(const my_calss &p)
{
// déclaré en static parce que son constructeur prend trop de temps
  static my_class r; 
  #pragma omp threadprivate(r)
 
  r.x=r.y=0.;
  // differents calculs
 
   return(r);
}