C++ プログラムで 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);
}
注:属性とミューテックス変数は、プログラムの最後で破棄する必要があります。このプログラムは継続的に実行されると想定しています。