Tous les OS Modernes offre aujourd'hui quelques opérations atomiques:
- Windows a
Interlocked*
API - FreeBSD a
<machine/atomic.h>
- Solaris a
<atomic.h>
- Mac OS X a
<libkern/OSAtomic.h>
Rien de tel pour Linux?
- J'ai besoin de travailler sur la plupart des Linux pris en charge les plates-formes, y compris: x86, x86_64 et les bras.
- J'en ai besoin pour travailler sur au moins GCC et Intel Compilateur.
- Je n'ai pas besoin d'utiliser la 3ème par la bibliothèque comme glib ou qt.
- J'en ai besoin pour travailler en C++ (C pas obligatoire)
Questions:
- GCC atomique les builtins
__sync_*
ne sont pas pris en charge sur toutes les plateformes (BRAS) et ne sont pas pris en charge par le compilateur Intel. - Autant que je sache,
<asm/atomic.h>
ne doit pas être utilisé dans l'espace utilisateur et je n'ai pas réussi du tout. Aussi, je ne sais pas si cela pourrait fonctionner avec les processeurs Intel compilateur.
Toutes les suggestions?
Je sais qu'il y a de nombreuses questions, mais certains d'entre eux du point de __sync*
ce qui n'est pas possible pour moi (BRAS) et un point d' asm/atomic.h
.
Peut-être il ya une ligne bibliothèque de l'assemblée qui fait cela pour GCC (ICC soutient gcc assemblée)?
Edit:
Il y a une solution très partielle pour les opérations d'ajout seulement (permet de mettre en œuvre atomique en vente libre, mais pas de blocage de libre-structures qui nécessitent des CAS):
Si vous utilisez libstc++
(Intel Compilateur utilise libstdc++
), alors vous pouvez utiliser __gnu_cxx::__exchange_and_add
que définie à l' <ext/atomicity.h>
ou <bits/atomicity.h>
. Dépend de la version de compilateur.
Cependant, je voudrais encore voir quelque chose qui prend en charge les SAE.