2016-05-21 6 views
0

を呼び出すmain()のコードがあります。 function_one()ではスレッドと呼び出し関数function_two()を作成しています。今問題はmain()function_one()を複数回呼び出していて、function_one()が呼び出されるたびに新しいスレッドを作成しているということです。このコードでは、4つ以上のスレッドを使用することはできません。変更することはできません。main()function_one()への以前の呼び出し中に作成されているスレッドを再利用できる方法はありますか?スレッドを複数回作成する呼び出し方法

これは、私が働いている何のための擬似コードです:あなたは、あなたのワーカースレッドをウェイクアップするワーカースレッド、およびcondition_variablesが必要

main() 
{ 
    int x=1,y=2; 
    while(1) { 
     x++;y++; 
     function_one(x,y); 
    } 
} 

function_one(int x, int y) 
{ 
    pthread_t ax; //initialization is missing 
    pthread_create(ax,NULL,&function_two,NULL); 
} 

function_two() 
{ 
    //some operation 
} 
+0

注意してください: 'pthread_t ax; pthread_create(&ax、NULL、function_two、NULL); ''&ax'の前のアンパサンドはオプションではなく、 'function_two'の前のアンパサンドは)です。コンパイラは 'pthread_create()'を誤って実行したことを伝えるべきです。そうでない場合は、深刻な問題があります。 –

答えて

0

pthread_cond_t new_value_cv; 
bool exit_flag; 


int main(){ 
    exit_flag=false; 
    pthread_t ax[4]; //initialization is missing 
    for(int i=0;i<4; i++){ 
     pthread_create(ax[i],NULL,&function_two,NULL); 
    } 
    int x=1,y=2; 
    while(1) { 
     x++;y++; 
     function_one(x,y); 
    } 

} 


function_one(int x, int y) 
{ 
    pthread_cond_signal(&new_value_cv); 
} 



function_two() 
{ 
    pthread_mutex_t wait_mutex; 

    while(1){ 
     pthread_cond_wait(&new_value_cv, &wait_mutex); 
     if (exit_flag) break; 

    //do_something 
    } 
} 

あなたは引数を取るfunction_two()が必要な場合は、消費者/プロデューサーパターンをチェックする必要があります。具体的には単一プロデューサ/マルチコンシューマパターン。基本的な考え方は、mainで共有されるスレッドセーフキューと4つの子スレッドを使用して値を配布することです。

関連する問題