与两个过程共享ETS表



i在一个过程中创建ETS表,我想在另一个过程中使用它。我如何在第二个过程中"打开" ETS表?在人页面上找不到好的功能。

您必须使用'nuper_table'和'public'选项创建ETS表。

喜欢

T = ets:new(yourtablename,[public,named_table]).

在这种情况下,其他本地流程可以按名称" yourTableName"使用此表。不必在其他过程中明确打开此表。

如果您不希望表具有唯一名称,则可以省略named_table并只使用public。然后,ets:new将返回一个整数,您需要将其传递给需要访问表的过程:

-module(foo).
-compile(export_all).
create_the_table(Pid) ->
    Table = ets:new(mytable, [public]),
    ets:insert(Table, {foo, bar}),
    Pid ! {the_table_is, Table},
    timer:sleep(infinity).
use_the_table() ->
    receive {the_table_is, Table} -> ok end,
    io:format("~p~n", [ets:lookup(Table, foo)]).

从外壳尝试一下:

2> c(foo).
{ok,foo}
3> Pid1 = spawn(foo, use_the_table, []).
<0.43.0>
4> spawn(foo, create_the_table, [Pid1]).
[{foo,bar}]
<0.45.0>

正如odobenus和sugoscia所说,您可以按名称访问ETS表(使其命名为_table)或通过标识符(将标识符传递给其他过程),并将表公开。p>是否从另一个模块访问它没有区别。

确保在执行ETS:INFO时,该表是由其他过程创建的。

new(Name, Options) -> tid() | atom()在此处

创建一个新表并返回一个表标识符,该表标识符可在后续操作中使用。表标识符可以发送到其他过程,以便可以在节点内的不同过程之间共享表。

公共任何过程都可以读或写入表。

保护所有者过程可以读写到表。其他过程只能读取表。这是访问权限的默认设置。

私人只有所有者进程可以读或写入表。

相关内容

  • 没有找到相关文章

最新更新