1

我想在 C++ 程序上使用 5 个线程。我想在旧线程结束时创建新线程。如何实施?如何删除旧线程?

谢谢!

4

2 回答 2

4

您可以为此目的使用pthread_join :

pthread_join() 函数将暂停调用线程的执行,直到目标线程终止,除非目标线程已经终止。从带有非 NULL value_ptr 参数的成功 pthread_join() 调用返回时,终止线程传递给 pthread_exit() 的值应在 value_ptr 引用的位置可用。当 pthread_join() 成功返回时,目标线程已终止。指定同一目标线程的多个同时调用 pthread_join() 的结果未定义。如果取消调用 pthread_join() 的线程,则不应分离目标线程。

于 2013-06-13T07:51:25.670 回答
1

你可以做这样的事情,

  • 在 main 中,创建 5 个线程(可能是分离的)。
  • 当一个线程即将终止时,在退出之前在线程内创建一个新的分离线程(并使用一个受锁保护的变量,该变量指示当前运行的线程数,如果它小于 5,则创建线程,否则退出)。

这样,您将不断创建新线程。

分离的线程与其他线程(包括主要线程)分离运行,没有人等待它们完成执行(它们不会使线程停止执行)。然而,当您使用pthread_join(threadName,NULL)调用此函数的线程时,必须等到threadName终止。[两者,pthread_detachpthread_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);

}

注意:属性和互斥变量应该在程序结束时销毁。我假设这个程序连续运行。

于 2013-06-14T11:32:08.327 回答