0

クラス B オブジェクトを持つクラス A があります。クラス B には、A インスタンスが更新し続ける (オフ イベント) ブール変数 bool があります。B オブジェクト b は Runnable を実装しています。

class A{
  private B b;
}

class B implements Runnable{
  private boolean bool;

  run(){
    while(true){
      if(bool){//do something}
    }
  }
}

a が B のコンストラクターを呼び出すときに初期化され、b インスタンスで start が呼び出されるまで b スレッドが開始されず、bool が初期化されるまで start が呼び出されないため、boolean bool は実際には a のスレッド上にあると想定します。

この場合、b スレッドは独自の bool のコピーを保持する必要があります。この場合、bool を a から変更して b スレッドが参照できるようにする最速の方法は何ですか? boolを揮発性にするか、bのコピーに直接割り当てる方法はありますか?

ループは忘れてください。GLES20用です。私が知る必要があるのは、b にブール値のコピーがあるかどうか、およびイベント スレッドが GL スレッドでブール値を継続的に更新するための最速の方法は何かということです。

4

2 に答える 2

1

ある段階で、変数からの読み取りと変数への書き込みが異なるスレッドで行われる可能性がある場合は、何らかの形式の同期が必要です。この場合、最も賢明なオプションは次のとおりです。

ただし、ユースケースによっては、適切な並行オブジェクト (ラッチ、セマフォ、キューなど) を使用して目標を達成し、不必要に多くの CPU サイクルを使用するビジー待機を回避するより良い方法がある場合があります。

于 2013-01-15T23:28:37.970 に答える
0

Java の Exchanger が必要なようです。トランザクションごとに新しいオブジェクトを生成し、トランザクション後にGCするのではなく、スレッド間でオブジェクトをセットアップします。

ここに良い説明とコードがあります:

http://www.javacodegeeks.com/2011/09/exchanger-and-gc-less-java.html

于 2013-01-16T21:46:50.793 に答える