POSIX多线程笔记(2):线程的退出和取消线程

本文详细探讨了在POSIX环境中,线程退出时使用exit和pthread_exit的区别,以及线程取消机制的工作原理。通过多个实例分析,解释了pthread_exit如何传递返回值,以及为何在多线程中需要考虑线程退出后数据的生命周期。同时介绍了pthread_cancel函数用于取消线程的操作,并强调了线程取消状态管理的重要性。
摘要由CSDN通过智能技术生成

线程退出中exit 和pthread_exit的区别

进程的终止可以通过在主函数main()中直接调用exit、return,或者通过进程中的任何其它线程调用exit来实现。在任何一种情况下,该进程的所有线程都会终止。
而pthread_exit函数则是使调用改函数的线程中止运行,并且允许线程传递一个指针。它的形式为:

void pthread_exit(void *value_ptr) ;

连接了这个线程可以获得参数value_ptr的值。回顾前面介绍的pthread_join函数,这个函数的参数void **value_ptr,正是保存pthread_exit函数的参数void *value_ptr的地址。这里要注意,pthread_exit的参数value_ptr必须指向线程退出后仍然存在的数据。

例1
#include <unistd.h>
#include <semaphore.h>
#include <sys/types.h>
#include <dirent.h>
#include <pthread.h>
#include <errno.h>
#include <signal.h>
#include <time.h>
#include <stdio.h>
void * thread_child(void *arg)
{
   
        while(1)
        {
   
                usleep(500*1000);
                printf("thread_child running!\n");
        }
        return NULL;
}
int main(int argc,char** argv)
{
   
        pthread_t tid;
        int i = 0;
        pthread_create(&tid, NULL, (void*)thread_child, &i);
        for(i=0;i<5;i++)
        {
   
                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值