Question Équivalent verrouillé sous Linux


Dans une application Linux C ++, quel est le moyen le plus simple d’obtenir les fonctionnalités Entrelacé fonctions sur Win32 fournissent? Plus précisément, un moyen léger d’incrémenter ou d’ajouter de façon atomique des entiers de 32 ou 64 bits?


12
2017-09-29 17:14


origine


Réponses:


Open-source d'Intel ThreadBuildingBlocks possède un modèle, Atomic, qui offre les mêmes fonctionnalités que la classe Interlocked de .NET.

Contrairement aux gabarits Atomic de gcc, il s'agit d'une plate-forme croisée qui ne dépend pas d'un compilateur particulier. Comme le souligne correctement Nemanja Trifunovic ci-dessus, cela dépend de comparer et échanger Instruction CPU fournie par les puces x86 et Itanium. Je suppose que vous ne vous attendriez à rien d'autre d'une bibliothèque Intel:)


8
2017-09-29 17:17



Juste quelques notes pour clarifier le problème qui n'a rien à voir avec Linux.

RWM les opérations (read-modify-write) et celles qui ne s'exécutent pas en une seule étape ont besoin du support matériel pour s'exécuter atomiquement; parmi eux s'incrémente et décrémente, fetch_and_add, etc.

Pour certaines architectures (y compris I386, AMD_64 et IA64), gcc prend en charge l'accès à la mémoire atomique. Par conséquent, aucune librairie externe n'est requise. Ici vous pouvez lire des informations sur l'API.


8
2017-09-29 19:31



Strictement parlant, Linux ne peut pas offrir de fonctions atomiques "interbloquées" comme celles de Win32, simplement parce que ces fonctions nécessitent une prise en charge matérielle, et que Linux s'exécute sur certaines plates-formes qui n'offrent pas ce support. Cela dit, si vous pouvez vous limiter à Intel x86 / x64, jetez un œil à l'implémentation du comptage de références dans la bibliothèque de pointeurs partagés Boost.


6
2017-09-29 18:10



le atomique les fonctions du Runtime Apache Portable sont vraiment proches des fonctions Win32 InterlockedXXX.


3
2017-09-30 11:33



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

Vous devriez utiliser un verrouiller xadd opération.

Voir par exemple ce.


2
2017-12-01 15:21



La bibliothèque glib assez répandue utilisée dans la programmation GTK et QT ainsi que dans les applications autonomes 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 prises en charge par Interlocked sur Win32, et sur les plates-formes où le matériel les supporte directement, elles sont intégrées au code d'assemblage requis.


2
2017-12-01 21:05



Après examen, ce Cela semble prometteur. Débordement de pile


-1
2017-09-29 17:15