线程的创建等待和退出代码实现

1、//int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);

pthread_t 定义的一个unsigned long 的指针类型*thread

const pthread_attr_t *attr是线程的属性

void *(*start_routine) (void *)是一个调用的函数指针去分配工作(去干活)

void *arg是给此线程传参的的参数

新创建的线程从函数start_routine的地址开始运行,该函数只有一个无类型指针参数arg。如果需要想函数start_routine函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg参数传入。

返回值,成功返回0,失败返回错误编号

2、线程退出

void pthread_exit(void *retval);

单个线程可以通过以下三种方式退出,在不终止整个进程的情况下停止它的控制流

①线程只是从启动例程中返回,返回值是线程的退出码。

②线程可以被同一进程中的其他线程取消。

③线程调用pthread_exit;

3、线程等待

int pthread_join(pthread_t thread, void **retval);

将线程阻塞。直到指定的线程调用pthread_exit(一般两个配合一起用)

 4、线程ID获取和比较

pthread_t pthread_self(void);

与进程的getpid();同理

#include <stdio.h>
#include <pthread.h>
//int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
         //                 void *(*start_routine) (void *), void *arg);
void *func(void *arg){
        static char *ret = "t1 is run out";

        printf("t1:%ld thread is created\n",(unsigned long)pthread_self());        //线程的PID号
        printf("t1:param is %d\n",*((int *)arg));        

        pthread_exit((void *)ret);        //接收到pthread_join传的pret,线程退出
}

int main()
{
        int ret;
        pthread_t t1;
        int param = 100;
//      int *pret;
        char *pret;
        ret = pthread_create(&t1,NULL,func,(void *)&param);        //创建线程t1

        if(ret == 0){
                printf("main:create t1 success \n");
        }
        printf("main :%ld\n",(unsigned long)pthread_self());
        pthread_join(t1,(void **)&pret);        //线程阻塞,防止创建完线程后直接执行到return 0;

                                                                //传一个字符串pret过去

        printf("main:t1 quit = %s\n",pret);

        return 0;
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值