【问题标题】:How can I implement a linked list in fortran 2003-2008如何在 fortran 2003-2008 中实现链表
【发布时间】:2012-01-28 17:53:01
【问题描述】:

我需要在 fortran 2003/2008 中为我的分子动力学代码实现链接列表数据结构,我正在使用最新的 fortran 编译器 (Intel)。

如何以最好的方式实现链表,如果可能的话,我更喜欢 Fortran 中的无锁无等待实现。

谢谢。

【问题讨论】:

标签: data-structures linked-list fortran fortran90


【解决方案1】:

如果您使用数据项和指向下一项的指针创建用户定义的类型,这是最简单的。这是假设一个单链表。例如,

   type MyList_type
      integer :: FirstItem
      real :: SecondItem
      etc
      type (MyList_type), pointer :: next_ptr => null ()
   end type MyList_type

然后用“allocate”创建第一个成员。此后,您编写代码来遍历列表,使用 next_ptr 逐步遍历列表。使用“关联”内在函数来测试 next_ptr 是否已定义,或者您是否已到达列表末尾。

如果您正在编写一个普通的顺序 Fortran 程序,那么无锁/无等待不是问题。如果您正在编写多线程/并行程序,那么对变量的一致访问是一个问题。

这里有更多示例:http://fortranwiki.org/fortran/show/Linked+list。 更好的是,Fortran 中的链表在 Metcalf 和 Reid 的《Fortran 90/95 Explained》一书中有清楚的解释。

【讨论】:

  • 我想知道无锁数据结构是否可行,我们在 Fortan 中是否有类似 atmoic oporations 的 CAS
  • Fortran 本身不提供原子操作,这超出了语言标准。 Fortran 不提供链表,它提供指针以及类型内部的指针指向该类型的能力。通常您编写自己的链表代码;在提供的某些链接中有一些用户贡献的代码可以使用或改编,但没有标准库。如果您有一个多线程程序,您可以使用线程库(OpenMP、MPI、...)的选项来保证对共享变量的一致访问,包括那些定义链表的变量。
猜你喜欢
  • 2013-11-19
  • 2013-05-18
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
  • 2010-11-02
相关资源
最近更新 更多