Google ne trouve rien. Sont-ils créés au point d'utilisation ou les parties génériques sont-elles partagées entre les instances?Les fonctions de modèle C++ sont-elles threadsafe?
(même pour les classes de modèle?)
Google ne trouve rien. Sont-ils créés au point d'utilisation ou les parties génériques sont-elles partagées entre les instances?Les fonctions de modèle C++ sont-elles threadsafe?
(même pour les classes de modèle?)
fonctions de modèle sont créés au moment de la compilation. La propriété template est complètement orthogonale à thread-safety.
Cela semble cool, mais qu'est-ce que cela signifie? :-) – DarkDust
Juste au cas où ce n'était pas assez clair: Les modèles C++ sont ce que l'on appelle des "générateurs de code". Cela signifie que lorsque le compilateur rencontre le modèle, il crée littéralement un nouvel ensemble d'instructions machine pour chaque type que vous utilisez dans ce modèle. Pour cette raison, vous vous retrouvez avec deux fonctions complètement distinctes qui s'appellent. La fonction int
@Brian: des cadres de pile différents seraient-ils créés pour les types typedef'd? Ma connaissance des compilateurs-entrailles est un peu fragile. – slashmais
Les fonctions de modèle sont simplement ... des modèles utilisés par le compilateur pour générer des fonctions "normales". Donc, c'est la même chose que les fonctions normales, il n'y a pas de différence.
Ils ne sont pas plus ou moins thread-safe que tout autre type de fonction.
+1: En d'autres termes, non. –
@John Dibling: Dans un autre mot, * mu *. http://www.catb.org/jargon/html/M/mu.html –
@Shmoopty: beaucoup mieux –
La seule façon que je peux penser à la sécurité de fil étant affectée par c'est que si someMethod<typename T>()
était pas thread alors en toute sécurité, il serait encore acceptable pour un fil de fonctionner sur someMethod<int>()
tandis qu'un autre a travaillé sur someMethod<std:string>()
, aussi longtemps que le manque de la sécurité des threads n'est pas venu de leur appel à une fonction non-modélisée.
La situation où quelque chose d'autre garantit qu'un seul thread effectue une tâche particulière avec un type particulier à la fois semble assez improbable.
La réponse est "non". Maintenant, la question devient, savez-vous ce que «threadsafe» signifie vraiment? –
@John Dibling: D'autres l'ont mieux expliqué que moi; voir ici: http://en.wikipedia.org/wiki/Thread_safety – slashmais
il ne demande pas une définition de la sécurité des threads, mais plutôt ce que * vous * comprenez par le terme. Wikipedia ne nous le dit pas, et c'est ce qui est important pour répondre à cette question. – jalf