我想在 C++ 程序上使用 5 个线程。我想在旧线程结束时创建新线程。如何实施?如何删除旧线程?
谢谢!
您可以为此目的使用pthread_join :
pthread_join() 函数将暂停调用线程的执行,直到目标线程终止,除非目标线程已经终止。从带有非 NULL value_ptr 参数的成功 pthread_join() 调用返回时,终止线程传递给 pthread_exit() 的值应在 value_ptr 引用的位置可用。当 pthread_join() 成功返回时,目标线程已终止。指定同一目标线程的多个同时调用 pthread_join() 的结果未定义。如果取消调用 pthread_join() 的线程,则不应分离目标线程。
你可以做这样的事情,
这样,您将不断创建新线程。
分离的线程与其他线程(包括主要线程)分离运行,没有人等待它们完成执行(它们不会使线程停止执行)。然而,当您使用pthread_join(threadName,NULL)
调用此函数的线程时,必须等到threadName
终止。[两者,pthread_detach
并pthread_join
确保线程资源被释放]
没有什么比删除 pthreads 更好了。
这种方式,
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);
}
注意:属性和互斥变量应该在程序结束时销毁。我假设这个程序连续运行。