[erlang-questions] Shared ETS Access

Steve Vinoski <>
Sun Jan 10 23:30:30 CET 2010

On Sun, Jan 10, 2010 at 4:57 PM, L. S. <> wrote:

> Where can I find a full, simple example of one Erlang process creating an
> ETS table and having another process access that table?
> After looking at the docs, I seem to understand the basic call to create
> and populate a table...
>    %ErlShellProcess1:
>        TabId = ets:new(food, [public, named_table]).
>        ets:insert(TabId, {drink, cofee}).
> ... (And I know I may have to use gen_server to create a persistent
> process) but I don't know the mechanics to make the it work.
>    %ErlShellProcess2:
>        ?


run() ->
    Parent = self(),
    spawn(fun() ->
                  TblName = my_table,
                  Tbl = ets:new(TblName, [public, named_table]),
                  Parent ! {ready, self(), TblName},
                      stop ->
        {ready, Loop, TblNm} ->
            ets:insert(TblNm, {"key", "value"}),
            Lookup = ets:lookup(TblNm, "key"),
            io:format("lookup returned ~p~n", [Lookup]),
            Loop ! stop

The spawned anonymous function creates and owns the ets table, and for this
example serves essentially the same purpose as a gen_server and its receive
loop would. The run() function spawns the loop, waits for the message
telling it the table name, then does an insert and a lookup on the table.
Note that all the main part of the run() function knows is the name of the
table received in the message from the loop.


More information about the erlang-questions mailing list