[concurrency-interest] synchronization based on a key

Dimitris Andreou jim.andreou at gmail.com
Thu May 24 12:13:16 EDT 2012


http://code.google.com/p/guava-libraries/issues/detail?id=859#c11

The file attached to the linked comment might end up in guava, and deals
with this very problem.
On May 24, 2012 7:27 AM, "bhm" <bheem at sbcglobal.net> wrote:

> I have a method that needs to be synchronized based on a key passed as
> parameter, that is, for same key multiple threads shouldn't be
> running. Following is what I did--
>
>
> static final ConcurrentMap<String,Boolean> IN_PROGRESS =
>   new ConcurrentHashMap<String,Boolean>();
>
> void foo(String key){
>    if(null == IN_PROGRESS.putIfAbsent(key, Boolean.TRUE)){
>      // no other thread is processing this key
>      try{
>          // process this key
>      } finally {
>         // done with processing this key
>         IN_PROGRESS.remove(key)
>      }
>    } else {
>      // some other thread is running this key, discard it
>    }
> }
>
> this works if I need to discard the request to process the key from
> thread t1 when another thread, t2, is processing that key.
>
> I need help to do following-
> make thread t1 wait while t2 is processing the key and resume t1 when
> t2 is finish processing same key.
>
> I'm aware that if there are multiple threads t1,t3,t4.. etc waiting
> for t2 to finish anyone of these thread can wake up and start
> processing the key irrespective of their order (if there is any) of
> asking to process the key.
>
> Thanks for help.
>
> Bheem
> _______________________________________________
> Concurrency-interest mailing list
> Concurrency-interest at cs.oswego.edu
> http://cs.oswego.edu/mailman/listinfo/concurrency-interest
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cs.oswego.edu/pipermail/concurrency-interest/attachments/20120524/906f71db/attachment.html>


More information about the Concurrency-interest mailing list