2016-11-09 3 views
0

私は、多数のワーカーアクターと、マスターアクターによってワーカーに送信されるタスクのリスト(リンクリスト)を持っています。リンクされたリストの各要素には、要素が作業者によってまだ取り込まれているかどうかを指定するBooleanフラグがあります。そうでなければ、ワーカーはフラグを選択してその要素を処理します。アクターがその要素を終了すると、次に選択されない要素のリスト要素がチェックされます。 作業者は、リストに残っている要素がなくなるまで作業を続けます。 私の質問は、要素が選択されていることを示すフラグを設定する最も良い方法です。私はフラグをAtomicBooleanを使って原子的にチェックして設定することを考えています。しかし、私はスカラーでAtomicBooleanを使う方法を知らない。 お知らせくださいScalaの共有リンクリスト

+1

あなたは俳優を使用していますが、俳優同士で状態を共有していますか?それはデザインの匂いのビット(とあなたの流通の可能性を制限します) –

+0

また、質問のタイトルは誤解を招く。リンクされたリストであることは無関係です。 –

答えて

1

あなたがJavaのAtomicBooleanをインポートして、いつものようにそれを使用することができます:私は、デザインを再考う

scala> import java.util.concurrent.atomic.AtomicBoolean 
import java.util.concurrent.atomic.AtomicBoolean 

scala> val ab = new AtomicBoolean(false) 
ab: java.util.concurrent.atomic.AtomicBoolean = false 

- 俳優は、通常、そのキュー/受信トレイ以外の任意のメカニズムを超える同期する必要はありません。 。どの程度:

  • ワーカー俳優がユニットを処理

    1. マスター俳優が労働者の俳優の中で作業単位を配布する準備ができてビットを送信する俳優をアキュムレータに
    2. アキュムレータ俳優は準備ができて、結果を収集し、リストを出力します。
  • +0

    マイケルに感謝します。リストは異質であり、要素のいくつかは他の要素よりも多くの時間がかかります。最初は労働者の間でそれを均等に分配することはできません。私は各作業員に一つの要素を送ることを考えています。その要素で作業した作業者がマスタに通知します。次にマスターはその自由な労働者に次の要素を送りますか? –

    +2

    @ A.G、そのコメントは、実際には作業者間でタスクを配布する方法に関する全く異なる質問です。別の質問として投稿したほうがよいでしょう –