Mercurial > hg > Papers > 2009 > linda-sigos
view 4.tex @ 7:624a45b40bfe
done.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 28 Mar 2009 13:45:19 +0900 |
parents | |
children |
line wrap: on
line source
\section{ プログラミング例} Federated Lindaは以下の様にして通信を行う。 \begin{itemize} \item public PSXLinda open(String \_host,int \_port) Linda Serverに対し、接続を行う。引数はホスト名とポート番号をとる。返り値はタプルスペースの番号となる。 \item public PSXReply in(int id) タプルスペース番号より引数で指定したidのタプルの受け取りを要求する。 受け取りは、返値のPSXReplyをチェックすることにより非同期に行なう。 in では待ち合わせは行なわれない。Call back 形式でタプルを受け取る ことも出来る。 \item public PSXReply out(int id, ByteBuffer data) 引数で指定したidでByteBuffer内のデータを送信する。 \item public int sync(long mtimeout) 接続しているLinda Serverとタプルの送受信のポーリングを行う。 \end{itemize} Protocol Engineとはタプルスペースを介してデータをやり取りするEngineである。 二つのサーバー間でやり取りを行う場合、以下のようなプログラムとなる。 \begin{verbatim} FederatedLinda fdl; PSXLinda getpsx; PSXLinda sendpsx; PSXReply in; ByteBuffer data = ByteBuffer.allocate(10); //通信を初期化する fdl = FederatedLinda.init(); //データを取ってくるホストと受け渡すホストとの接続開始 getpsx = fdl.open("cs100",10000); sendpsx = fdl.open("cs101",10001); //取ってくるホストからinを指定してデータを取得 in = getpsx.in(10) data = in.getData(); //受け渡すホストに対しデータとidを指定して同期 sendpsx.out(10,data); fdl.sync(); \end{verbatim} callback のAPIも用意されていて、{\tt fdl.sync() } した時に、 {\tt in, rd} の結果が戻っていれば、そのcallback が実行される ようになっている。