2011-12-27 1 views
4

Мне нужно реализовать структуру данных списка ссылок для моего кода молекулярной динамики в fortran 2003/2008 Я использую новейшие компиляторы fortran (Intel).Как реализовать связанный список в fortran 2003-2008

Как я могу реализовать связанный список наилучшим образом, я бы предпочел, чтобы в Fortran не было блокировки без ожидания, если это возможно в Fortran.

Спасибо.

+1

Простой поиск по Google должен дать вам множество примеров. Например, http://www.pgroup.com/lit/articles/insider/v3n2a2.htm и http://cs.ubishops.ca/ljensen/fortran/pointer.htm – hatchet

+0

Любые коммерческие выпуски без блокировки –

ответ

6

Проще всего создать пользовательский тип с элементами данных и указателем на следующий элемент. Это предполагает односвязный список. например,

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 90/95 Explained» Меткалфа и Рида.

+1

Я хотел бы знать, доступны ли блокирующие данные структуры данных, есть ли у нас CAS, например, atmoic oporations в Fortan –

+4

. Сам Fortran не обеспечивает атомные операции, что выходит за рамки стандартного языка. Fortran не предоставляет связанные списки, он предоставляет указатели и возможность для указателя внутри типа указывать на этот тип. Обычно вы пишете свой собственный код связанного списка; есть некоторые пользовательские коды в некоторых ссылках, которые могут быть использованы или адаптированы, но нет стандартной библиотеки. Если у вас многопоточная программа, вы используете параметры вашей библиотеки потоков (OpenMP, MPI, ...), чтобы гарантировать согласованный доступ к общим переменным, включая те, которые определяют связанный список. –

Смежные вопросы