2011-12-27 11 views
4

Fortran 2003/2008で分子動力学コードのリンクリストデータ構造を実装する必要があります最新のFortranコンパイラ(Intel)を使用しています。Fortran 2003-2008でリンクリストを実装するにはどうすればいいですか

可能な限り最良の方法でリンクリストを実装するにはどうすればいいですか?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 

次に、「割り当て」を使用して最初のメンバーを作成します。その後、next_ptrを使用してリストを辿るコードを記述します。 next_ptrがまだ定義されているかどうかをテストするには、 "associated"組み込み関数を使用するか、代わりにリストの最後に達しているかどうかをテストします。

普通のシーケンシャルなFortranプログラムを書いているなら、ロックフリー/ノーウェイトは問題ではありません。マルチスレッド/並列プログラムを作成する場合、変数への一貫したアクセスが問題になります。

さらにいくつかの例があります:http://fortranwiki.org/fortran/show/Linked+list。 Fortranのリンクリストは、MetcalfとReidの "Fortran 90/95 Explained"という書籍ではっきりと説明されています。

+1

私は、ロックフリーのデータ構造が可能かどうかを知りたいです、FortanにCASのようなCASを持っているのですか? –

+4

Fortran自体は言語標準を超えて原子操作を提供しません。 Fortranはリンクされたリストを提供しません。ポインタと、その型を指す型の中のポインタのための機能を提供します。通常は、独自のリンクされたリストコードを作成します。提供されたリンクのいくつかには、ユーザーが提供したコードがいくつかありますが、標準ライブラリは使用できません。マルチスレッドプログラムを使用している場合は、スレッドライブラリ(OpenMP、MPIなど)のオプションを使用して、リンクされたリストを定義するものを含め、共有変数への一貫したアクセスを保証します。 –

関連する問題