1

C++ プログラムで 5 つのスレッドを使用したい。古い作業が終了したら、新しいスレッドを作成したい。それを実装する方法は?古いスレッドを削除するにはどうすればよいですか?

ありがとう!

4

2 に答える 2

1

このようなことができます。

  • メインで、5 つのスレッドを作成します (分離されている可能性があります)。
  • スレッドが終了しようとしているときは、終了する前にスレッド内に新しい切り離されたスレッドを作成します (そして、現在実行中のスレッドの数を示すロックによって保護された変数を使用します。スレッドが 5 未満の場合は、スレッドを作成するか、終了します)。

そうすれば、継続的に新しいスレッドを作成できます。

切り離されたスレッドは、他のスレッド (メインを含む) から切り離されて実行され、実行が完了するのを待つ人はいません (実行を停止するスレッドを作成しません)。一方、この関数を呼び出すスレッドを使用する場合、終了pthread_join(threadName,NULL)するまで待機する必要threadNameがあります。[両方とも、スレッド リソースが解放されていることpthread_detachを確認します]pthread_join

pthread の削除に勝るものはありません。

なんかこう、

static int count = 5;
pthread_mutex_t mutexForCount = PTHREAD_MUTEX_INITIALIZER;
pthread_attr_t attr;

void* tFn(void* arg)
{
    std::cout<<"\nI am "<<pthread_self();
    pthread_mutex_lock(&mutexForCount);
    count--;
    if(count<=5)
    {
        pthread_t temp;
        pthread_create(&temp,&attr,tFn,NULL);
        count++;
    }
    pthread_mutex_unlock(&mutexForCount);

}

int main()
{
pthread_t  threadArray[5];
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

for(int i = 0;i<5;i++)
{
    pthread_create(&threadArray[i],NULL,tFn,NULL);
}

for(int i = 0;i<5;i++)
{
    pthread_join(threadArray[i],NULL);
}

pthread_exit(NULL);

}

注:属性とミューテックス変数は、プログラムの最後で破棄する必要があります。このプログラムは継続的に実行されると想定しています。

于 2013-06-14T11:32:08.327 に答える