atomares setzen eines bits
-
ist folgender code wirklich atomar? ist das lock nötig? wie ist allgemein der stil? was könnte man noch verbessern? wie schaut s bei smp systemen aus?
inline bool atomic_set(unsigned int& integer_reference, unsigned int bit_index) { if(bit_index > 31) { return false; } register unsigned int tmp = 0; asm ( "lock btsl %%ebx, (%%eax) \t\n" "rcl %%eax \t\n" : "=a"(tmp) : "a"(&integer_reference), "b"(bit_index) ); return (tmp & 1); }
-
Ja, ist atomar.
lock wird nur auf SMP Maschinen benötigt.
-
danke. gibt s eine bessere methode, das ergebnis aus dem assembler code in den c++ code zu bringen?