C++ 使用Erlang消息传递在仿真中表示并发电梯

C++ 使用Erlang消息传递在仿真中表示并发电梯,c++,concurrency,erlang,synchronization,message-passing,C++,Concurrency,Erlang,Synchronization,Message Passing,我意识到这不是一个理想的问题,但我会尽力解释:) 首先,我的任务是创建一个带有多部电梯的建筑模拟 让我们假设我的建筑由2到5部电梯和任意数量的楼层组成。这里的目标是允许“人们”登上电梯,并前往不同的楼层 这里的关键是同时运行每台电梯 我已经在C++中用每一个电梯的线程来完成这个任务。我正在努力想一个简单的方法来实现这一点,在Erlang中传递消息。我不是要一个代码答案,更重要的是,要解释我如何使用消息传递来解决这个问题。我当然试图阅读有关这个主题的信息,但这让我感到困惑 到目前为止,我理解线程必

我意识到这不是一个理想的问题,但我会尽力解释:)

首先,我的任务是创建一个带有多部电梯的建筑模拟

让我们假设我的建筑由2到5部电梯和任意数量的楼层组成。这里的目标是允许“人们”登上电梯,并前往不同的楼层

这里的关键是同时运行每台电梯

我已经在C++中用每一个电梯的线程来完成这个任务。我正在努力想一个简单的方法来实现这一点,在Erlang中传递消息。我不是要一个代码答案,更重要的是,要解释我如何使用消息传递来解决这个问题。我当然试图阅读有关这个主题的信息,但这让我感到困惑

到目前为止,我理解线程必须通过相互传递消息进行通信。非常感谢任何有助于澄清这方面方法的帮助。这不是评分作业或任何东西,是一个锻炼我的知识

最后问题: 如何使用消息传递(在Erlang中)对具有多个编程为独立运行的电梯的建筑进行建模


您不需要维护共享状态,而是为每个进程提供其自己的状态,若有任何更改,则向所有相关进程发送带有更新(和相关数据)的消息

Daniel所调用的进程是Erlang进程,而不是线程。它们可能看起来像线,但它们至少既不同又相似。。。因此,最好将它们称为进程

在设计Erlang解决方案时,您需要小心不要带着C思维定势。Erlang的要点是它是一个不同的范例,虽然Erlang本身是用C实现的,因此在Erlang中所做的一切最终都是在C线程中运行的,但重要的是要基本上忘记这一点,转而使用Erlang范例

在C语言中,它们是需要管理的,它们很狡猾,当你没有仔细观察它们时,它们会咬你。Erlang进程是非常棒的,无论出于何种目的,您都可以生成无限数量的Erlang进程,而且它们实际上不需要任何照管

正如Daniel所说,在您的提升场景中,为每个提升生成一个流程是一个合理的设计。Erlang要考虑的一件事是,在这种情况下,编号并不重要,一旦你编写了一个模块来模拟你的电梯,你可以产生2到5个,或者2到500万个,你通常会发现与Erlang几乎没有什么区别。 我并不是说你不能设计一个坏的实现,但老实说,一旦你习惯了Erlang,你会发现它真的适合于快速开发,而不存在通常的并行和并发陷阱


当你推进你的电梯场景时,正确的方法是了解OTP,使用gen_服务器之类的东西进行电梯,并由一名主管从中动态(或不动态)生成电梯。如果您的电梯发生碰撞,该过程将自动被更换/重新启动。这对于电梯故障(流程已停止;电梯不可用)和维修工程师前来修复(流程重新启动;电梯再次可用)来说是非常危险的。电梯里任何人在电梯坏了的时候,会发生什么,这是一个更高级的话题,其中有几个可能的解决方案。C++中的< /P>…[/],每个电梯都有一个线程。“在Erlang,你也会这样做。这些线程是否相互通信?在Erlang中,您使用消息传递。是的,他们使用了。对不起,我意识到,我只是在努力设计如何通过信息实现电梯之间的交互,这是一个有点陌生的概念,由于某种原因,我无法完全理解我的头脑中C++线程的通信方式。共享变量和函数调用试图锁定共享数据上的互斥体。而不是保持共享状态,而是给每个进程自己的状态,如果有什么变化,则用更新发送消息。(和相关数据)发送到所有相关流程。说得好,但也请在回答中包含我的评论内容。评论是不稳定的,它们随时都可能消失;)(即“发送更新消息”部分)。谢谢大家!帮个大忙!:)