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

如何删除pthread? 我想在C++程序上使用5个线程。我想在旧线程结束工作时创建新线程。如何实施?如何删除旧线程,c++,pthreads,C++,Pthreads,谢谢 为此,您可以使用: pthread_join函数应暂停调用的执行 直到目标线程终止,除非目标线程 已经终止。从成功的pthread_联接返回时 使用非NULL值_ptr参数调用,该值传递给 终端线程的pthread_出口应在 值\u ptr引用的位置。当pthread_连接返回时 已成功终止目标线程。结果 多个同时调用pthread_join并指定相同的 目标线程未定义。如果调用pthread_join的线程为 取消,则不应分离目标线程 为此,您可以使用: pthread_join函数应暂

谢谢

为此,您可以使用:

pthread_join函数应暂停调用的执行 直到目标线程终止,除非目标线程 已经终止。从成功的pthread_联接返回时 使用非NULL值_ptr参数调用,该值传递给 终端线程的pthread_出口应在 值\u ptr引用的位置。当pthread_连接返回时 已成功终止目标线程。结果 多个同时调用pthread_join并指定相同的 目标线程未定义。如果调用pthread_join的线程为 取消,则不应分离目标线程

为此,您可以使用:

pthread_join函数应暂停调用的执行 直到目标线程终止,除非目标线程 已经终止。从成功的pthread_联接返回时 使用非NULL值_ptr参数调用,该值传递给 终端线程的pthread_出口应在 值\u ptr引用的位置。当pthread_连接返回时 已成功终止目标线程。结果 多个同时调用pthread_join并指定相同的 目标线程未定义。如果调用pthread_join的线程为 取消,则不应分离目标线程


你可以做这样的事

在主线程中,创建5个可能的线程。 当线程即将终止时,创建一个新的分离线程 并使用一个受锁保护的变量,该变量指示运行的线程数 当前,如果其小于5,则在 退出前先执行线程。 这样,您将不断创建新线程

与其他线程分离运行可能包括在内,没有人会等待它们完成执行—它们不会使线程停止执行。然而,当您使用线程调用此函数时,必须等待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);

}

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

你可以做这种事

在主线程中,创建5个可能的线程。 当线程即将终止时,创建一个新的分离线程 并使用一个受锁保护的变量,该变量指示运行的线程数 当前,如果其小于5,则在 退出前先执行线程。 这样,您将不断创建新线程

与其他线程分离运行可能包括在内,没有人会等待它们完成执行—它们不会使线程停止执行。然而,当您使用线程调用此函数时,必须等待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);

}

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

谢谢!但这意味着,例如,我的主线程将停止并等待另一个线程。这很糟糕。也许我必须使用pthread_detach。有哪些选项?@Gleb Dyachenko,如果您不想阻止主线程,您可以在main中创建一个基本线程,以便按顺序运行您的5个线程。据我所知,pthread_detech具有不同的功能。谢谢!但这意味着,例如,我的主线程将停止并等待另一个线程。这很糟糕。也许我必须使用pthread_detach。有哪些选项?@Gleb Dyachenko,如果您不想阻止主线程,您可以在main中创建一个基本线程,以便按顺序运行您的5个线程。据我所知,pthread_detech具有不同的功能。