一起talk C栗子吧(第一百一十回:C语言实例--线程标识符)


各位看官们,大家好,上一回中咱们说的是线程创建与结束的例子,这一回咱们说的例子是:线程标识符。闲话休提,言归正转。让我们一起talk C栗子吧!

我们在上一回中介绍如何创建线程时有一个线程标识符的问题没有详细介绍,今天再做一些说明。

我们可以使用命令:ps x来查看进程及其线程,不过命令运行结果中并没有显示线程的标识符(线程ID)。线程标识符只在创建它的进程内有效,因此,在大部分情况下没有必要知道线程标识符。当然了,如果需要查看线程标识符时,我们可以借助系统函数来获取线程标识符。

pthread_t pthread_self(void);
  • 该函数用来获取线程的标识符,类似获取进程标识符的函数:getpid();
  • 该函数没有参数,直接使用就可以;
  • 函数运行成功时返回线程标识符,该函数不会运行失败;

在Linux系统中,为了提高代码的可移植性,通常使用无符号整型(unsigned int)来当作线程标识符的类型。我们可以打印出来标识符的值供大家查看。

pthread_t thread_id;
thread_id = pthread_self();  // 获取线程标识符
printf("The ID of thread is :%u \n",(unsigned int)thread_id);  //打印线程标识符

另外,我们也可以在创建线程时从pthread_create函数的参数中得到线程标识符。

res = pthread_create(&thread_value,NULL,thread_func,(void *)param);
if(0 != res)
{
    printf("thread can't be created \n");
    return 1;
}
printf("The ID of thread is :%u \n",(unsigned int)thread_value); //打印线程标识符

看官们,正文中就不写代码了,详细的代码放到了我的资源中,大家可以点击这里下载使用。

该代码是在上一回代码的基础上修改来的,在代码中主要添加了获取和显示线程标识符的代码。另外,在编译代码的时候,需要使用l参数来导入链接库,不然会有链接错误。例如:

gcc ThreadID.c  -o s -lpthread  //使用gcc编译ThreadID.c文件,并且生成名为s的可执行文件

下面是程序的运行结果,请大家参考:

Create a thread 
The process ID is 3477          //显示创建线程的进程ID
The ID of thread is :3075689280  //创建线程的时候获取线程ID,并且打印出来
this is the function,it is running normally .and the param is: Thread function param 
The ID of thread is :3075689280  //线程运行时获取线程ID,并且打印出来
The old status is 0 
thread function running finished and the status is :3 

从上面的运行结果中可以看到,我们在创建线程的时候获取的线程ID与线程运行时获取的线程ID完全一致。两次获取到的线程ID都是:3075689280

各位看官,关于线程标识符的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

talk_8

真诚赞赏,手有余香

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

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

打赏作者

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

抵扣说明:

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

余额充值