如何在 fortran 2003-2008 中实现链表
我需要在 fortran 2003/2008 中为我的分子动力学代码实现链接列表数据结构我正在使用最新的 fortran 编译器(英特尔)。
我如何以尽可能最好的方式实现链表,如果可能的话,我更喜欢在 Fortran 中使用无锁无等待实现。
谢谢。
I need to implement a link list data structure for my molecular dynamics code in fortran 2003/2008 I am using the newest fortran compilers (Intel).
How do I come about implement the linked list in the best way possible I would prefer a lock-free no wait implementation if possible in Fortran.
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您使用数据项和指向下一项的指针创建用户定义类型,这是最简单的。这是假设一个单链表。例如,
然后使用“分配”创建第一个成员。此后,您编写代码来遍历列表,使用 next_ptr 逐步遍历列表。使用“关联”内部函数来测试 next_ptr 是否已定义,或者是否已到达列表末尾。
如果您正在编写普通的顺序 Fortran 程序,那么无锁/无等待不是问题。如果您正在编写多线程/并行程序,那么对变量的一致访问是一个问题。
以下是更多示例:http://fortranwiki.org/fortran/show/Linked+list。
更好的是,Metcalf 和 Reid 所著的《Fortran 90/95 Expanded》一书中对 Fortran 中的链表进行了清晰的解释。
It is easiest if you create a user defined type with your data items and the pointer to the next item. This is assuming a singly-linked list. e.g.,
Then create the first member with "allocate". Thereafter you write code to traverse the list, using next_ptr to step through the list. Use the "associated" intrinsic function to test whether next_ptr is defined yet, or instead you have reached the end of the list.
If you are writing an ordinary sequential Fortran program then lock-free/no-wait is not an issue. If you are writing a multi-threaded / parallel program, then consistent access to the variables is an issue.
Here are some more examples: http://fortranwiki.org/fortran/show/Linked+list.
Even better, linked lists in Fortran are clearly explained in the book "Fortran 90/95 Explained" by Metcalf and Reid.