为什么在erlang:spawn_opt中禁用了'monitor'选项?

3
我偶然读到了一个名为“监视器(monitor)”的 spawn_opt : http://www.erlang.org/doc/man/erlang.html#spawn_opt-2 但当我使用它时,我得到了以下结果:
1> gen_server:start(some_module, [], [{spawn_opt, [monitor]}]).
** exception error: bad argument
     in function  proc_lib:check_for_monitor/1 (proc_lib.erl, line 182)
     in call from proc_lib:spawn_opt/4 (proc_lib.erl, line 161)
     in call from proc_lib:start_link/5 (proc_lib.erl, line 317)
2> 

以下是 OTP 中 proc_lib.erl 文件大约在第 182 行附近发生的情况:

%% OTP-6345
%% monitor spawn_opt option is currently not possible to use
check_for_monitor(SpawnOpts) ->
    case lists:member(monitor, SpawnOpts) of
        true ->
            erlang:error(badarg);
        false ->
            false
    end.
< p > monitor选项是有意被禁用的,但我不明白为什么。我在OTP-6345上进行了一些搜索,结果发现它来自发布说明,但我也没有找到足够的信息:http://www.erlang.org/download/otp_src_R11B-3.readme

我们经常手动执行生成-监视步骤而没有任何问题,但为什么OTP代码选择完全忽略monitor选项?是否存在潜在的竞争条件或其他陷阱?

1个回答

2
这个修复与这封电子邮件有关。proc_lib和monitor的功能有些重叠,会导致问题。

这确实很微妙,并且不会在我们的程序中造成任何实际问题,但了解细节是很好的。非常感谢。 - l04m33

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接