race conditions and network latency

Jehiah Czebotar jehiah at gmail.com
Sun Mar 5 16:48:50 UTC 2006

why don't you just do

data = memcached->incr(data_name)

then the server handles the locking for you with it's increment /
decrement functions, and latency doesn't matter.

On 3/5/06, Kevin Webb <kevin at tackledesign.com> wrote:
> Hi,
> I've been developing a shared memory architecture with locking using
> memcached's PHP client. It's working wonderfully on a single machine
> (with many concurrent accesses) or machines on a local network.
> However, over the Internet, clients accessing the server with
> significant latency appear collide.  Are there any known issues with
> latency and use of the Add call?
> In pseudo code I'm doing this:
> lock_id = random()
> while(!memcached->add(lock_name, lock_id))
> {
>    wait()
> }
> data = memcached->get(data_name)
> data++;
> memcached->set(data_name, data)
> memcached->delete(lock_name)
> When things break down it appears that two clients are able to add
> different "lock_id" values for the same lock_name. It's very hard to
> track down the concurrency of this given the latency however, based on
> the way the program runs, I can see values getting skipped as "data"
> increments. On a local machine, no matter how many clients I run or
> how fast they increment values don't get skipped.
> If you have any thoughts or suggestion on why I might be having issues
> with high latency clients I'd very intersted to know.
> Thanks for your help!
> Kevin

More information about the memcached mailing list