2012-05-04 3 views
0

次のコードでは、「スレッド」を使用していません。複数のインスタンスを作成しても問題はありますか?スレッドを使用すると、スレッドがアドレス空間を共有するため、機能が損なわれる可能性があります。スレッドの周りに複数のインスタンスを作成すると失敗しますか? - シングルトンパターン

もちろん、複数のオブジェクトを作成する必要はありませんが、私はそうしています(私がここでやったやり方)、それは問題になるでしょうか?あなたが唯一のスレッドからインスタンスを使用する場合は

#include <iostream> 
using namespace std; 

class boiler 
    { 
     private: 
      // Non static variables can't be initialized inside a class. 
      bool boilerEmpty; 
      bool mixtureBoiled; 

     public: 
      boiler() 
      { 
       boilerEmpty = true; 
       mixtureBoiled = false; 
      } 
      void fillBoiler() 
      { 
       if (boilerEmpty == true) 
       { 
        cout << "\nFill boiler."; 
        boilerEmpty = false; 
       } 
      } 

      void boilMixture() 
      { 
       if ((boilerEmpty == false) && (mixtureBoiled == false)) 
       { 
        cout << "\nBoil mixture"; 
        mixtureBoiled = true; 
       } 
      } 

      void drainMixture() 
      { 
       if ((boilerEmpty == false) && (mixtureBoiled == true)) 
       { 
        cout << "\nDrain mixture."; 
        boilerEmpty = true; 
       } 
      } 
    }; 

    int main() 
    { 
     boiler b, c; 
     b.fillBoiler(); 
     b.boilMixture(); 
     b.drainMixture(); 

     c.fillBoiler(); 
     c.boilMixture(); 
     c.drainMixture(); 
    } 
+0

多分私は何かが欠けている...しかし、私は静的変数を参照していない... – Andrew

+0

@Andrew私は静的変数を入れていません。私はそれらを必要としますか? –

+0

スレッディングは静的なものがないので、ここでは複数のオブジェクトとは関係ありません。唯一の問題は、2つ以上のスレッドから同じオブジェクトへの同時アクセスです。 – KillianDS

答えて

3

、その後持つ多くの場合は、あなたに何の問題が発生しません。矛盾した動作を招く唯一の方法は、複数のスレッドで1つのインスタンスを使用しようとすることです。

複数のスレッドで1つのインスタンスを使用する場合は、ミューテックス・セマフォを使用して、そのインスタンスが一度に1つのスレッドでのみ使用されていることを確認する必要があります。

1

同時実行プログラミング(実際のマルチスレッドであるかどうかにかかわらず)は、複数の実行スレッド間での共有された可変データの存在下では困難です。定義により

不変で何が同期の問題なしに共有することができます。

  • クラスデータ:RTTI、仮想テーブル
  • 機能コード:Linux上の例では、OSが持つページを守ります彼らは
  • constデータに書き込まれることはありません確実にするために特別なモード:文字列リテラル、マジックナンバーは
...、定数を宣言しました

したがって、並行プログラミングを心配する必要があるのは、変更可能なデータがどのように共有されるかということだけです。この共有は、2つの方法で発生する可能性があります明示的に

  • :悪名高いグローバル変数静的クラスは
属性そのうち:
  • 暗黙的に実行の別のスレッドに変数への参照を渡します

    プログラムにはグローバル変数がないため、共有は明示的に実行されます(2番目の実行スレッドを作成した場合)。

  • 関連する問題