线程(一) 对线程自身API相关的使用

线程概念等等

示例1:创建一个简单的线程

pThdemo1.c
#include <stdio.h>
#include <pthread.h>

void *func1(void *arg)
{
        printf("t1:%ld thread is create\n",(unsigned long)pthread_self());
        printf("t1:param is %d\n",*((int *)arg));
}

int main()
{
//      int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);      
        int ret;
        int param = 100;
        pthread_t t1;
        ret = pthread_create(&t1,NULL,func1,(void *)&param);
        if(ret == 0){
                printf("main:create t1 success\n");
        }
        printf("main:%ld\n",(unsigned long)pthread_self());
//      while(1);

//      pthread_join();
        return 0;
}

 运行结果为:  有while(1)情况下

没有的情况下   会直接main线程完了  新线程跳过了

示例二:改进示例 线程用 join 和exit

pThj_edemo2.c
#include <stdio.h>
#include <pthread.h>

void *func1(void *arg)
{
        static int ret = 10;

        printf("t1:%ld thread is create\n",(unsigned long)pthread_self());
        printf("t1:param is %d\n",*((int *)arg));

        pthread_exit((void *)&ret);
}

int main()
{
//      int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);      
        int ret;
        int param = 100;
        pthread_t t1;

        int *pret = NULL;

        ret = pthread_create(&t1,NULL,func1,(void *)&param);
        if(ret == 0){
                printf("main:create t1 success\n");
        }
        printf("main:%ld\n",(unsigned long)pthread_self());
//      while(1);

        pthread_join(t1,(void **)&pret);
        printf("main : t1 quit:%d\n",*pret);
        return 0;
}

运行结果为:   对整型数值

示例三: 改进示例 数字换成字符

pThj_e_strdemo3.c
#include <stdio.h>
#include <pthread.h>

void *func1(void *arg)
{
        static int ret = 10;
        static char *p = "t1 is run out";
        printf("t1:%ld thread is create\n",(unsigned long)pthread_self());
        printf("t1:param is %d\n",*((int *)arg));

        pthread_exit((void *)p);
}

int main()
{
//      int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);      
        int ret;
        int param = 100;
        pthread_t t1;

        char *pret = NULL;

        ret = pthread_create(&t1,NULL,func1,(void *)&param);
        if(ret == 0){
                printf("main:create t1 success\n");
        }
        printf("main:%ld\n",(unsigned long)pthread_self());
//      while(1);

        pthread_join(t1,(void **)&pret);
        printf("main : t1 quit:%s\n",pret);
        return 0;
}

 运行结果为:  返回字符串

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点灯小哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值