欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-10 15:08:49
各位看官们,大家好,上一回中咱们说的是线程创建与结束的例子,这一回咱们说的例子是:线程标识符。闲话休提,言归正转。让我们一起talk 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

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