Counter *c_current; int get() { // Read Counter *c = c_current; return c->sum; } void increment() { SPIN_LOCKED { // Copy Counter *c = alloc_counter(); c->sum = c_current->sum + 1; smp_wmb(); // Memory barrier // Update c_current = c; } }