Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #3866

Re: Concurrent bidirectional one-to-many map?

From Tom Anderson <twic@urchin.earth.li>
Newsgroups comp.lang.java.programmer
Subject Re: Concurrent bidirectional one-to-many map?
Date 2011-05-09 18:28 +0100
Organization Stack Usenet News Service
Message-ID <alpine.DEB.2.00.1105091825310.18864@urchin.earth.li> (permalink)
References (1 earlier) <iq1mmc$hbv$1@dont-email.me> <iq348b$iv1$1@news.albasani.net> <nsadnUZcjoF01ljQnZ2dnUVZ_gednZ2d@earthlink.com> <alpine.DEB.2.00.1105080428540.28763@urchin.earth.li> <08586289-8935-4532-93d0-e8c7dd45cb24@c1g2000yqe.googlegroups.com>

Show all headers | View raw


On Mon, 9 May 2011, Robert Klemme wrote:

> On 8 Mai, 05:51, Tom Anderson <t...@urchin.earth.li> wrote:
>> On Sat, 7 May 2011, Patricia Shanahan wrote:
>>> On 5/7/2011 2:43 AM, Sebastian wrote:
>>> ...
>>>> To give an example, I'm trying to solve a problem like this:
>>>> Associate tasks with workspaces, where a workspace may hold many
>>>> tasks,but a task may be associate with at most one workspace.
>>> ...
>>
>>> I'd deal with that sort of problem by having a custom data structure
>>> that uses java.util structures in its implementation.
>>
>> It's not obvious to me how to make it work correctly with good
>> concurrency; the ConcurrentHashMap approach is to stripe the locks, so as
>> to partition the hashtable into independently-locked domains, but to use
>> the same set of stripes for the reverse mapping, you would need to be able
>> to tell which stripe a value belongs to - and that can only be done by
>> looking it up in the very reverse mapping you are worrying about locking!
>> Can you have a separate set of stripes for the reverse mapping? Do you
>> need some multi-phase approach, where you determine the stripes without
>> locking, then acquire the locks to do the actual lookup or insertion? Is
>> there some lock-free voodoo which could be used? Is there any mileage in
>> using a union-find structure to collapse the sets of values into a single
>> representative which could participate in a 1:1 key-value mapping? I am
>> certainly not any sort of data structure guru, but i don't have answers to
>> any of those questions. That makes it a problem worth discussing here, in
>> my book. Does anyone have any ideas on how to do this?
>
> This could be solved by standard relationship implementations: Make
> workspace a member of Task and synchronize accesses on Task.  Example:
>
> https://gist.github.com/962538
>
> By using monitors of Task and Workspace we have quite fine granularity
> of locking.

True! The fastest map is no map at all.

If the OP can't modify Task or Workspace, perhaps he could consider 
writing wrappers which refer to each other, a TaskWithWorkspace, and 
WorkspaceWithTasks (perhaps with better names), and passing those around 
rather than plain Tasks and Workspaces.

tom

-- 
It is a formal cultural policy to show unreasonable bias towards any
woman who is both attractive and weird.

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Concurrent bidirectional one-to-many map? Sebastian <sebastian@undisclosed.invalid> - 2011-05-06 22:07 +0200
  Re: Concurrent bidirectional one-to-many map? markspace <-@.> - 2011-05-06 13:45 -0700
    Re: Concurrent bidirectional one-to-many map? Sebastian <sebastian@undisclosed.invalid> - 2011-05-07 11:43 +0200
      Re: Concurrent bidirectional one-to-many map? Lew <noone@lewscanon.com> - 2011-05-07 07:59 -0400
        Re: Concurrent bidirectional one-to-many map? Lew <noone@lewscanon.com> - 2011-05-07 12:49 -0400
          Re: Concurrent bidirectional one-to-many map? Sebastian <sebastian@undisclosed.invalid> - 2011-05-07 21:34 +0200
      Re: Concurrent bidirectional one-to-many map? Patricia Shanahan <pats@acm.org> - 2011-05-07 06:40 -0700
        Re: Concurrent bidirectional one-to-many map? Tom Anderson <twic@urchin.earth.li> - 2011-05-08 04:51 +0100
          Re: Concurrent bidirectional one-to-many map? Robert Klemme <shortcutter@googlemail.com> - 2011-05-09 06:43 -0700
            Re: Concurrent bidirectional one-to-many map? Tom Anderson <twic@urchin.earth.li> - 2011-05-09 18:28 +0100
              Re: Concurrent bidirectional one-to-many map? Sebastian <sebastian@undisclosed.invalid> - 2011-05-09 22:57 +0200
                Re: Concurrent bidirectional one-to-many map? Lew <noone@lewscanon.com> - 2011-05-09 18:36 -0400
                Re: Concurrent bidirectional one-to-many map? Tom Anderson <twic@urchin.earth.li> - 2011-05-10 08:34 +0100
                Re: Concurrent bidirectional one-to-many map? Sebastian <sebastian@undisclosed.invalid> - 2011-05-11 10:09 +0200
                Re: Concurrent bidirectional one-to-many map? Sebastian <sebastian@undisclosed.invalid> - 2011-05-11 10:51 +0200
                Re: Concurrent bidirectional one-to-many map? Robert Klemme <shortcutter@googlemail.com> - 2011-05-11 04:55 -0700
                Re: Concurrent bidirectional one-to-many map? Lew <noone@lewscanon.com> - 2011-05-11 09:00 -0400
                Re: Concurrent bidirectional one-to-many map? Sebastian <sebastian@undisclosed.invalid> - 2011-05-11 20:47 +0200
      Re: Concurrent bidirectional one-to-many map? markspace <-@.> - 2011-05-07 09:35 -0700
      Re: Concurrent bidirectional one-to-many map? Michal Kleczek <kleku75@gmail.com> - 2011-05-09 16:42 +0200
  Re: Concurrent bidirectional one-to-many map? Roedy Green <see_website@mindprod.com.invalid> - 2011-05-07 03:46 -0700

csiph-web