一起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。
各位看官,关于线程标识符的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
推荐阅读
-
一起talk C栗子吧(第一百八十四回:C语言实例--在printf函数中设置输出宽度三)
-
一起talk C栗子吧(第一百九十六回:C语言实例--DIY less命令五 )
-
一起talk C栗子吧(第一百六十二回:C语言实例--套接字知识体系图)
-
一起talk C栗子吧( 第一百四十回:C语言实例--文件操作:基于文件描述符三)
-
一起talk C栗子吧(第一百四十三回:C语言实例--文件操作:基于文件指针三)
-
一起talk C栗子吧(第一百三十九回:C语言实例--文件操作:基于文件描述符二)
-
一起talk C栗子吧(第一百三十八回:C语言实例--文件操作:基于文件描述符一)
-
一起talk C栗子吧(第一百四十一回:C语言实例--文件操作:基于文件指针一)
-
一起talk C栗子吧(第一百四十二回:C语言实例--文件操作:基于文件指针二)
-
一起talk C栗子吧(第一百六十回:C语言实例--套接字通信模型二)