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