Je cherche un moyen d'incrémenter un short de manière atomique, puis de retourner cette valeur. J'ai besoin de le faire à la fois en mode noyau et en mode utilisateur, donc c'est en C, sous Linux, sur l'architecture Intel 32 bits. Malheureusement, en raison des exigences de vitesse, un verrou de mutex ne va pas être une bonne option.Comment faire un incrément atomique et récupérer en C?
Existe-t-il un autre moyen de le faire? À ce stade, il semble que la seule option disponible est d'intégrer un assemblage. Si c'est le cas, quelqu'un pourrait-il me diriger vers les instructions appropriées?
En particulier, '__sync_add_and_fetch' ressemble à ce que l'OP est après. – caf
J'ai trouvé ça avant, mais il y a deux problèmes. La première est que d'après ce que je comprends, ils ne fonctionneront pas avec le compilateur du noyau ... Je ne suis pas sûr de savoir pourquoi, alors peut-être qu'il y a un travail facile. En second lieu, même dans l'espace utilisateur, l'éditeur de liens me donne l'erreur suivante: undefined reference to '__sync_add_and_fetch_2' Si quelqu'un peut pointer des solutions à l'un de ces problèmes (ou les deux!) Je serais très reconnaissant. – Bryan
Tout comme une mise à jour, __sync_add_and_fetch fonctionne dans l'espace utilisateur, si vous incluez l'indicateur -march = pentium lors de la compilation (http://stackoverflow.com/questions/130740/link-error-when-compiling-gcc-atomic-operation- en mode 32 bits), alors maintenant je travaille sur le fonctionnement du module du noyau. – Bryan