1

我正在一个进程中创建一个具有唯一原子名称的 ETS 表。该过程执行并终止。进程终止是否会清除 ETS 消耗的资源(内存)?

使用后是否有必要清理/删除 ETS 表?

这就是我正在做的事情:

parentProcess() -> 
     UniqueAtomTerm = 'myAtomIdentifier',
     ets:new( UniqueAtomTerm, [] ),
     myProc (UniqueAtomTerm).

.

myProc( UniqueAtomTerm ) ->
    .... do some inserts, etc
    ets:delete_all_objects( UniqueAtomTerm ).

看来,如果我尝试使用相同的原子标识符创建另一个 ETS 表,它将出错,因此上述方法似乎不起作用。根据上述,我不能将 ETS 表选项设置为私有,因为我需要从不同的进程插入(以防私有会清除 ETS 资源)。

所以底线问题:如何从特定的 ETS 表中删除所有资源?

4

1 回答 1

10

创建表的进程是表的所有者。如果所有者终止,则表将被删除,并且其所有资源也将被删除。您可以通过调用更改所有者ets:give_away/3。您也可以使用 . 显式删除表ets:delete/1

于 2013-06-11T03:58:03.587 回答