2017-02-12 10 views
0

まだ少しプログラミングに新しいので、あまりにも多くの意味を作っていない場合は申し訳ありません。私が作業しているオブジェクトの別の2次元配列に対応するmutexロックの2次元配列を作成しようとしています。ここに私のコードですmutexロックの2次元配列を作る方法は?

#define NUM_THREADS 100 

static pthread_mutex_t mutexes[NUM_THREADS][NUM_THREADS] = { 
    for(int i = 0 ; i < NUM_THREADS ; i++) { 
    P99_DUPL(NUM_THREADS, PTHREAD_MUTEX_INITIALIZER); 
    } 
}; 

私はこれを正しく行っていますか?このことをすることさえ可能ですか?

編集:私がコンパイルしようとすると、 "for 'の前に" expected expression "というエラーが表示されます。

+0

は、それが配列のもののためメートルミューテックス×n個を持っていることは可能ですか?はい、おそらく賢明ではありません。そのように初期化できますか? C/C++ではありません(新しいバージョンでは何らかのリスト理解が導入されない限り)。また、ターゲットマシンが100コア/スレッドのオーダでなければ、この多くのスレッドを実行することは意味がありません。スレッドプールサイズの優れたヒューリスティックは、n + ln(n)です(nは使用可能なCPUコア/スレッドの数です)。 – datenwolf

+0

ヒントをお寄せいただきありがとうございます。私はバックペダルを試み、別の戦略を考え出します。 –

答えて

0

forループを使用して2D配列を定義して初期化することはできません。非常に大きな配列(100 x 100)を処理するので、おそらく最も良い方法は定義と初期化を分離することです。だろう2D intergerアレイの場合

int i, j; 
#define ARRAY_SIZE 100 
int my_array[ARRAY_SIZE][ARRAY_SIZE]; // Define the variable 

for (i=0; i<ARRAY_SIZE; ++i)   // Initialize the variable 
{ 
    for (j=0; j<ARRAY_SIZE; ++j) 
    { 
     my_array[i][j] = i * j; 
    } 
} 
+0

本当にありがとう、それは私が必要としたものではありませんが、私は何をする必要があるかを理解するのに役立ちました! –

関連する問題