gpt4 book ai didi

concurrency - Erlang 中的 PID 列表

转载 作者:行者123 更新时间:2023-12-04 16:19:58 25 4
gpt4 key购买 nike

长话短说,我正在尝试在 Erlang 中复制 Sleeping barber 问题。

在我的解决方案中,我决定将所有正在等待的进程放入一个列表中。然后,一旦进程轮流,我就会将该 PID 从列表中删除。

不幸的是,当我打电话时

length(myListOfPids).

它失败了,例如:
length([<0.46.0>]).
* 2: syntax error before: '<'

有没有办法存储 PID 以便我可以调用它们并正常使用它们? IE。
PID ! message

...以防万一,这是我在运行程序时收到的实际错误:
=ERROR REPORT==== 1-Jul-2010::05:50:40 ===
Error in process <0.44.0> with exit value:
{badarg,[{erlang,length,[<0.46.0>]},{barber1,waitingRoom,2}]}

barber1 是我的模块,waitingRoom 是跟踪哪些进程正在等待的函数

最佳答案

您还可以使用 pid/3 从它的三个组件构造一个 Pid。

1> 长度([pid(0,35,0)])。

请注意,如果您在与创建它的节点不同的节点上构建 pid,则使用这些技术中的任何一种构建 Pid 都会出错。

您的程序遇到的问题不同。

{badarg,[{erlang,length,[<0.46.0>]},{barber1,waitingRoom,2}]}

对 erlang:length/1 的调用创建了一个 badarg。 {erlang,length,[<0.46.0>]} 的第三个元素是传递给 erlang:length 的参数列表。所以这相当于:

1> 二郎:长度(pid(0,46,0))。

您打算在哪里:

1> 二郎:长度([pid(0,46,0)])。

(令人讨厌的是,erlang shell 现在对您隐藏了 erlang 的内部错误表示。将上述错误替换为:

** 异常错误:函数长度/1 中的错误参数称为长度(<0.35.0>)

这更容易理解但不太有用,因为它妨碍了自己学习解释 erlang 错误的基本技能。)

关于concurrency - Erlang 中的 PID 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3156843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com