I was thinking about that (increment/decrement)... But, first, if the tasks read the value of the variable that needs to be incremented, isn't there a posibility that all tasks will read the same value at the same time and then increment it in the same time ?
On 14 December 2010 11:59, Simon <qila...@gmail.com> wrote: > The synchronized block won't work at all, since it's not guaranteed > that you only have a single instance of your application running at > any point in time. As soon as you have multiple instances then you > will be synchronizing in different JVMs and hence you'll get multiple > threads accessing the cache, and hence the same problem will occur. > > You could probably use the Memcache increment/decrement functionality > to hook together a rough cross-instance synchronization, since they > increment and decrement atomically. > > On Dec 14, 5:22 am, Michael Weinberg <weinbe...@gmail.com> wrote: > > You can use the standard Java synchronization to synchronize the task > > threads, e.g. > > > > synchronized (YourMemcachedDataClass.class) { > > YourMemcachedDataClass cachedData = > > (YourMemcachedDataClass)cache.get(CACHE_KEY); > > > > if (cachedData == null) > > cachedData = new YourMemcachedDataClass (); > > > > cachedData.add(...); > > cachedData.set(...); > > > > cache.put(CACHE_KEY, cachedData); > > > > } > > > > this way only 1 thread at a time will get into the synchronized block. > > > > Hope it helps.. > > > > Michael Weinberg > > > > On Dec 13, 11:41 am, Ice13ill <andrei.fifi...@gmail.com> wrote: > > > > > Maybe there's something that i don't know very well about the memcache > > > service and this problem is simpler then i thing it is... If so, > > > please advice :) > > > > > On Dec 13, 6:38 pm, Ice13ill <andrei.fifi...@gmail.com> wrote: > > > > > > I need advice for implementing concurrent access to a memcache > > > > variable, when used by multiple running tasks. > > > > The problem is this: I have a number of tasks reading from datastore > > > > and doing some processing. > > > > When the processing is complete, i add a String to a List stored in > > > > memcache. So i need to get the List from memcache, add a new element, > > > > and put it back. The pb is that if 2 tasks write on that variable, i > > > > get an exception (I understand that the memcache service gives me a > > > > "clone" of the object, not the object itself, or am I wrong ?) > > > > So how can i avoid more than one tasks writing in the same object ? > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine for Java" group. > To post to this group, send email to > google-appengine-j...@googlegroups.com. > To unsubscribe from this group, send email to > google-appengine-java+unsubscr...@googlegroups.com<google-appengine-java%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/google-appengine-java?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to google-appengine-j...@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.