如何删除pthreads

How to delete pthreads?

本文关键字:pthreads 删除 何删除      更新时间:2023-10-16

我想在c++程序中使用5个线程。我想创建新的线程时,旧的结束工作。如何实现它?如何删除旧线程?

谢谢!

可以使用pthread_join:

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

你可以这样做,

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

这样你就可以不断地创建新的线程。

分离线程从其他线程(包括main)分离运行,没有人等待它们完成执行(它们不会使线程停止执行)。然而,当您使用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);
}

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

线程函数退出时线程结束