Interloqué équivalent sur Linux
En C++ application Linux, ce qui est la façon la plus simple pour obtenir les fonctionnalités que l' Interloqué fonctions Win32 fournir? Plus précisément, un moyen léger de incrémente de manière atomique ou ajouter 32 ou 64 bits entiers?
OriginalL'auteur twk | 2008-09-29
Vous devez vous connecter pour publier un commentaire.
Intel open-source ThreadBuildingBlocks possède un modèle Atomique, qui offre les mêmes fonctionnalités que .NET de la classe Interlocked.
Contrairement à la gcc Atomique de built-ins, c'est la croix-plate-forme et ne dépend pas d'un particulier compilateur. Comme Nemanja Trifunovic (correctement les points ci-dessus, cela dépend de la compare-and-swap PROCESSEUR des instructions fournies par le processeur x86 et puces Itanium. Je suppose que vous ne seriez pas s'attendre à autre chose d'un processeur Intel de la bibliothèque : )
OriginalL'auteur cero
Juste quelques notes afin de clarifier la question qui n'a rien à voir avec Linux.
RWM (read-modify-write) opérations et ceux qui ne s'exécutent pas en une seule étape besoin de matériel de soutien pour l'exécution des atomiquement; parmi eux incréments et décréments, fetch_and_add, etc.
Pour certains d'architecture (y compris I386, AMD_64 et IA64) gcc a un support intégré pour l'accès à la mémoire, donc pas de bibliothèque externe est nécessaire. Ici vous pouvez lire quelques informations sur l'API.
OriginalL'auteur Nicola Bonelli
À proprement parler, Linux ne peut pas offrir atomique "interloqué" fonctionne comme dans Win32, tout simplement parce que ces fonctions nécessitent le matériel de soutien, et Linux tourne sur certaines plates-formes qui n'offrent pas de soutien. Ceci étant dit, si vous pouvez vous contraindre à Intel x86/x64, jetez un oeil à la mise en œuvre de comptage de référence dans Boost partagé des pointeurs de la bibliothèque.
OriginalL'auteur Nemanja Trifunovic
La atomique fonctions de Apache Portable Runtime sont vraiment proche de la Win32 InterlockedXXX fonctions.
OriginalL'auteur Clay
Vous pouvez insérer du code assembleur dans votre source, à utiliser x68 contrefil instructions directement.
Vous devez utiliser un de verrouillage xadd opération.
Voir, par exemple,cette.
OriginalL'auteur
Assez commun glib bibliothèque utilisée dans GTK et QT avec la programmation 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 y a
g_atomic
fonctions pour la plupart des opérations que Contrefil appuie sur Win32, et sur les plates-formes où le matériel directement en charge de ces, ils se sont intégrées en tant que de besoin code assembleur.OriginalL'auteur Ben Combee
Après un autre examen, cette semble prometteur. Yay débordement de la pile.
OriginalL'auteur twk