2010-11-26 32 views

Répondre

3

Si la portabilité n'est pas une préoccupation, vous devez décider qui vous avez le plus confiance pour bien faire les choses. Une bibliothèque est généralement conçue pour assurer la portabilité. Il a du mal à rivaliser avec un système d'exploitation qui a été durci pendant plus de 15 ans.

Vérifiez this thread pour voir un exemple de la façon dont l'implémentation évidente n'est pas la meilleure.

+0

Eh bien, par exemple, il y a TBB :: atomique d'Intel. Microsoft fournit le système d'exploitation, mais Intel produit le processeur. Qui feriez-vous plus confiance? –

+1

Hehe, avez-vous confiance que le code Intel fonctionne bien sur un processeur AMD? –

+0

Supposons que le code sera toujours exécuté sur un processeur Intel, ce qui est vrai dans mon cas. –

1

Les fonctions Winapi interverrouillées fonctionnent sur les anciens processeurs, même lorsqu'il n'y a pas de support CPU pour les opérations verrouillées. 386 et peut-être 486, pas vraiment un problème aujourd'hui, sauf si vous soutenez toujours Win9x et NT plus ancien.

+0

Ils fonctionnent cependant différemment sur ces processeurs. (ils sont seulement atomiques par rapport à d'autres opérations imbriquées) – jalf

0

Cela dépend probablement de la bibliothèque atomique spécifique en question.

Une bonne bibliothèque avec un back-end spécifique aboutirait probablement à la même implémentation d'une paire d'instructions ASM pour émettre une instruction x86 lock et effectuer leur travail. Et en supposant que la bibliothèque elle-même est portable, faites ensuite votre code portable.

Une implémentation atomique naïve peut faire quelque chose de plus lourd comme utiliser un mutex pour protéger une variable normale. Je ne sais pas de tout ce que faire - juste faire le point pour l'argument. En tant que tel, compte tenu de vos exigences de non-portabilité, l'utilisation des fonctions Win32 devrait suffire. Alternativement, aller de l'avant avec une version atomique, mais peut-être regarder la mise en œuvre réelle.