Linux-c给线程取名字

摘要:
为了便于区分进程中的每个线程,可以通过prctl()为每个线程命名。Prctl是一个系统调用,可用于读取和更改线程的属性。用户界面定义如下:1#include23intprctl;第一个参数option用于告诉prctl如何处理当前线程。对于不同的操作,稍后所需的参数数量也不同。1英寸;以下要求适用于arg2:PR_SET_NAME:arg2是用于存储要设置的线程名称的字符指针,即arg2。名称的最大长度为15个字节,应该用'

https://blog.csdn.net/jasonchen_gbd/article/details/51308638

 1 #define wtm_set_thread_name(n) ({ 
 2     char tname[THREAD_NAME_LEN + 1] = ""; 
 3     if (strlen(n) > THREAD_NAME_LEN) 
 4         log_debug("wtm_util_misc", "Thread name is too long, truncating it..."); 
 5     strlcpy(tname, n, THREAD_NAME_LEN); 
 6     int ret = 0; 
 7     if ((ret = prctl(PR_SET_NAME, tname, 0, 0, 0)) < 0) 
 8         log_debug("wtm_util_misc", "Error setting thread name "%s": %s", tname, strerror(errno)); 
 9     ret; 
10 })

已上为自己的代码,下面为转载内容。

为了能方便的区分一个进程中的每个线程,可以通过prctl()给每个线程取个名字。这样在会创建多个线程的程序执行过程中,就能知道一个pid或tid对应的是哪个线程,对调试程序有一定帮助。

prctl是个系统调用,可以用来读取和更改一个线程的属性。其用户态接口定义如下:

1 #include <sys/prctl.h>
2 
3 int prctl(int option, unsigned long arg2, unsigned long arg3,
4    unsigned long arg4, unsigned long arg5);

第一个参数option用来告诉prctl要对当前线程做什么操作,针对不同的操作,后面需要的参数个数也不同。其中用来获取和修改当前线程名字的option是下面两个:


PR_SET_NAME:设置当前线程的名字
PR_GET_NAME:获得当前线程的名字

这两个option都只需要一个参数,即用来存储线程名的字符串。

 1int prctl(int option, unsigned long arg2); 

对于arg2有如下要求:
PR_SET_NAME:arg2存放将要设置的线程名的字符指针,即(char *)arg2。名字的长度最大为15字节,且应该以'

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JavaFX获取屏幕尺寸Scala语言简介和开发环境配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java并发(思维导图)

1,线程状态转换 无限期等待: 限期等待: 线程生命流程:    2,实现方式    代码实现样例【三种方式】: package com.cnblogs.mufasa.demo2; import java.util.concurrent.Callable; public class test1_Runnable implements Run...

Android中AsyncTask的简单用法

转自:http://blog.csdn.net/cjjky/article/details/6684959 在开发Android移动客户端的时候往往要使用多线程来进行操作,我们通常会将耗时的操作放在单独的线程执行,避免其占用主线程而给用户带来不好的用户体验。但是在子线程中无法去操作主线程(UI 线程),在子线程中操作UI线程会出现错误。因此android提...

C#中的多线程

原文:http://www.albahari.com/threading/part2.aspx 文章来源:http://blog.gkarch.com/threading/part2.html 1同步概要 在第 1 部分:基础知识中,我们描述了如何在线程上启动任务、配置线程以及双向传递数据。同时也说明了局部变量对于线程来说是私有的,以及引用是如何在线程之间...

C#中回滚TransactionScope的使用方法和原理

TransactionScope只要一个操作失败,它会自动回滚,Complete表示事务完成  实事上,一个错误的理解就是Complete()方法是提交事务的,这是错误的,事实上,它的作用的表示本事务完成,它一般放在try{}的结尾处,不用判断前台操作是否成功,如果不成功,它会自己回滚。 在.net 1.1的时代,还没有TransactionScope类...

DataScope v1.0 多功能串口虚拟示波器使用介绍

DataScope v1.0 特性 1、无需安装,启动即用;2、支持同时刷新多达10个通道的单精度浮点型数据;3、支持多种格式的通道数据导入、导出及回放;4、支持全屏浏览;5、支持图表数据统计、测量及缩放;6、支持蓝牙适配器;7、支持各通道独立刷新;8、支持3D轨迹显示;9、3D立方体显示;10、航空仪表;11、灵活可屏蔽的快捷键支持。 ---软件下载见原...

springboot配置 Druid , yml格式

datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/mp?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai u...