5

多くのメモリを割り当てる C++ クラスがあります。これは、メモリを割り当てられない場合にクラッシュするように設計されたサードパーティ ライブラリを呼び出すことによって行われ、アプリケーションが並列スレッドでクラスの複数のインスタンスを作成することがあります。スレッドが多すぎるとクラッシュします。解決策としての私の最善のアイデアは、たとえば、同時に 3 つを超えるインスタンスが実行されないようにすることです。(これは良いアイデアですか?) そして、それを実装するための私の現在の最良のアイデア、ブースト ミューテックスを使用することです。次の疑似コードの行に沿った何か、

MyClass::MyClass(){
  my_thread_number = -1; //this is a class variable
  while (my_thread_number == -1)
    for (int i=0; i < MAX_PROCESSES; i++)
      if(try_lock a mutex named i){
        my_thread_number = i;
        break;
      }
  //Now I know that my thread has mutex number i and it is allowed to run
}

MyClass::~MyClass(){
    release mutex named my_thread_number
}

ご覧のとおり、ここでのミューテックスの正確な構文についてはよくわかりません..要約すると、私の質問は

  1. スレッド数を制限してメモリエラーを解決したい場合、正しい方向に進んでいますか?
  2. はいの場合、ミューテックスまたはその他の方法で行う必要がありますか?
  3. はいの場合、私のアルゴリズムは健全ですか?
  4. ブーストミューテックスで try_lock を使用する方法の良い例はありますか?

編集:プロセスではなく、スレッドについて話していることに気付きました。編集: Linux と Windows の両方で実行できるアプリケーションの構築に携わっています...

4

2 に答える 2