Je suis à la recherche pour obtenir des instructions (machine x86) ou l'optimisation de la ligne de code suivante:Trouver premier bit et mis hors service il atomiquement
lock()
int x = ffs(words); // find first bit that set
long words = unset(x, words); // unset the bit "x" in "words"
unlock()
Je ne sais pas comment faire cela sans verrouillage.
Je doute que vous puissiez, à moins qu'il y ait une instruction machine permettant ce type d'opération. –
Je crains que vous ayez à vous contenter d'une boucle de spin de comparaison et d'échange pour cela. Quelle est la largeur du bitfield? – doynax
Une recherche binaire ferait au moins une telle boucle O (log). Bien que vous passiez probablement plus de temps sur les décisions que vous économisez théoriquement, surtout quand vous considérez qu'il ne serait pas pratique de se dérouler. – Tommy