计算机仿真中的HLA技术中的餐馆例子分析 (1) Production

本文详细分析了计算机仿真中的HLA技术,以餐馆联邦的production联邦为例,阐述了如何实现时间受限和时间调节,以及同步点处理。文中详细介绍了mainThread函数中的关键步骤,如配置信息获取、对象类和属性的处理,以及时间推进的主循环逻辑。通过对外部和内部事件的处理,揭示了HLA在协同仿真中的运作机制。
摘要由CSDN通过智能技术生成

从书中例子来看,这个餐馆例子是第一个真正意义上的仿真例子。因为前两个例子的共同点是:所有联邦都运行同一个程序,仅仅是通过运行设置(比如有的订阅,有的发布),才表现为不同的联邦。而餐馆联邦直接把联邦的程序分开,不同的联邦成员具有不同的程序代码。

 

另一个方面,书上对这个例子有较详细的解释。这也为这个例子的分析带来了很多便利。

 

书上把production联邦作为例子进行了详细分析,我们这边也先从production联邦入手。其实后面可以看到,production,transport,comsumption三个联邦代码非常类似,甚至manager和viewer的代码也类似,只是pruduction联邦,consumption联邦使用了NER的时间调度方式,后manager,viewer和transport联邦使用了TAR的时间调度方式。

 

总体来看,每个联邦都有几个java文件组成,以production联邦为例:Production.java,ProductionFrame.java, ProductionInternalError.java, ProductionNames.java,FedAmbImpl.java(production)。其中,frame是GUI类,FedAmbImpl包括所有回调函数。所有对RTI的函数调用,都在Production.java完成,使用_rti变量。

--------------------------------------------------------------------------------------------------------

主函数很简单

 

  public static void main(String[] args) {

 Properties props = parseArgs(args);

    loadProperties(props);

    Production production = new Production(props);

    production.mainThread();

  }

主要功能是从命令行或者配置文件中读取相关参数,产生production对象,运行mainThread线程

---------------------------------------------------------------------------------------------------------

 

主要的功能都在mainThread函数中

 

(1)取得相关配置信息,判断是否有federation execution实例运行,没有则创建,然后加入join

 

(2)设置时间受限和时间调节。这里首先设置了时间受限,同时在设置时间受限和时间调节时,使用了barrier机制来协调各个线程(barrier机制在例子中多次使用,这里不讨论其细节)。

 

(3)获取相关对象类,属性,交互类的handle,存储下来以备后续使用。--getHandles();

 

(4)发布对象类及其相关属性,包括Serving类及其position属性和type属性;Chef对象类及其position,chefStage和servingName

 

(5)订阅对象类及其相关属性,包括Boat对象类及其position,spaceAvailable和cargo属性,以及SimulationEnds交互类和TransferAccepted交互类。

 

(6)处理第一个同步点ReadyToPolulate,发出同步点已经achieved请求。使用barrier机制阻塞线程,结束阻塞后输出已经同步信息。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值