Question

Dans une application C ++ Linux, quel est le moyen le plus simple d'obtenir la fonctionnalité que Fonctions interverrouillées sur Win32? Plus précisément, un moyen léger d’incrémenter ou d’ajouter atomiquement des entiers 32 ou 64 bits?

Était-ce utile?

La solution 7

Après un examen plus approfondi, this Cela semble prometteur. Yay débordement de pile.

Autres conseils

Les ThreadBuildingBlocks Open Source d’Intel ont un modèle, Atomic, qui offre les mêmes fonctionnalités que la classe Interlocked de .NET. .

Contrairement aux programmes intégrés Atomic de gcc, il est multi-plateforme et ne dépend pas d'un compilateur particulier. Comme Nemanja Trifunovic le souligne à juste titre ci-dessus, cela dépend de la instruction de calcul de la CPU fournie par x86 et puces Itanium. Je suppose que vous ne vous attendriez à rien d'autre d'une bibliothèque Intel:)

Strictement parlant, Linux ne peut pas offrir un "interlocked" atomique. fonctions comme celles de Win32, tout simplement parce que ces fonctions nécessitent un support matériel, et que Linux est exécuté sur certaines plates-formes n'offrant pas ce support. Cela dit, si vous pouvez vous contraindre à utiliser Intel x86 / x64, jetez un œil à la mise en oeuvre du comptage de références dans la bibliothèque de pointeurs partagés Boost.

Les fonctions atomic de Apache Portable Runtime sont vraiment proches. aux fonctions Win32 InterlockedXXX.

Vous pouvez insérer du code d'assemblage dans votre source pour utiliser directement des instructions imbriquées x68.

Vous devez utiliser une opération lock xadd .

Voir, par exemple, this .

La bibliothèque glib assez courante utilisée dans la programmation GTK et QT, ainsi que de manière autonome, offre une variété d'opérations atomiques. Voir http://library.gnome.org/devel/glib /2.16/glib-Atomic-Operations.html pour une liste. Il existe des fonctions g_atomic pour la plupart des opérations prises en charge par Interlocked sous Win32 et sur les plates-formes où le matériel les prend directement en charge, elles sont intégrées au code d'assemblage requis.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top