Erlang中的ets的选项中有一个是protected,但是我测试出来感觉有错误。

发布于 2014/10/07 16:55
阅读 680
收藏 0

Erlang中的ets的选项中有一个是protected,但是我测试出来感觉有错误,希望大家帮忙看看。。

test_ets() ->
    spawn(?MODULE, dd, [self()]),
    receive
        {xx, Id} ->
            io:format("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ~n", []),
            T = ets:tab2list(Id),//这句话报错,protected不是共享读吗?
            zdebug:log("xx is ~p~n", [T])
    end.

dd(Parent) ->
    Id = ets:new(session, [set, protected, {keypos, 1}]),
    ets:insert(Id, {1, "A"}),
    Parent ! {xx, Id},
    Id.



加载中
0
hncscwc
hncscwc

估计是子进程结束 导致这个表已经无效了 所以才报错

你可以试试子进程不退出的情况

dd(Parent) ->
    Id = ets:new(session, [set, protected, {keypos, 1}]),
    ets:insert(Id, {1, "A"}),
    Parent ! {xx, Id},
    receive
        _ ->
            ok
    end.



0
心有未来
心有未来

When the process terminates, the table is automatically destroyed.

http://www.erlang.org/doc/man/ets.html

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部