tag proposal
Dustin Sallings
dustin at spy.net
Fri Oct 12 05:14:58 UTC 2007
On Oct 11, 2007, at 17:45, Brian Aker wrote:
> Not even close to being atomic. Not only do you have issues with
> multicore, you have worse issues with SMP because of the costs
> around synchronizing the variables across the CPU transport (aka
> the bus between the CPU's).
Short of pinning all of the increments to a single CPU, you're just
going to have to deal with synchronizing this state.
> When incrementing/changing values you need to wrap the write in a
> mutex if you want to be sure of the change.
You don't need a mutex if you have CAS. Java's AtomicInteger is
implemented using a volatile integer (volatile mostly means that it
can't be stored in a CPU cache, but also is used to establish a
happens-before relationship with other threads on reads and writes).
So, given a facility for cache line synchronization and a CAS, I
imagine you'll end up with a lot of code that looks like this (from
Java's AtomicInteger):
public final int addAndGet(int delta) {
for (;;) {
int current = get();
int next = current + delta;
if (compareAndSet(current, next))
return next;
}
}
glib has something similar as well. It's not guaranteed to be lock-
free, but it can be done on a few platforms anyway.
--
Dustin Sallings
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.danga.com/pipermail/memcached/attachments/20071011/1f339278/attachment.html
More information about the memcached
mailing list