> Erlang中文手册 > give_away/3 改变一个表的拥有者

ets:give_away/3

改变一个表的拥有者

用法:

give_away(Tab, Pid, GiftData) -> true

让进程 Pid 成为表 Tab 的新的拥有者。如果设置成功,信息 {'ETS-TRANSFER',Tab,FromPid,GiftData} 将会被发送到新的所属进程上。

进程 Pid 进程必须是存活,本地的,且并还没有表拥有。当前调用着的进程必须是表的拥有进程。

NOTE:give_away 并不影响表的 heir 操作。例如,表的拥有者可以将 heir 设成自己,放弃表的所有权,然后在表的新的拥有进程崩溃时重新继承表的拥有权。

Pid = spawn(fun () -> receive foo -> ok end end),
Tab = ets:new(test_ets_new, [public]),
ets:give_away(Tab, Pid, []).
Pid = spawn(fun () -> receive foo -> ok end end),
Tab = ets:new(test_ets_new, [public]),
Owner1 = ets:info(Tab, owner),
ets:give_away(Tab, Pid, []),
Owner2 = ets:info(Tab, owner),
io:format("Owner1 ~p Owner2 ~p~n", [Owner1, Owner2]).