从glibc v2.12开始,您可以使用和pthread_getname_np设置/获取线程名称。
这些接口在一些其他POSIX系统(BSD,QNX,Mac)上可用,形式稍有不同。
设置名称将是这样的:
#include // or maybe for some OSes
// Linux
int pthread_setname_np(pthread_t thread, const char *name);
// NetBSD: name + arg work like printf(name, arg)
int pthread_setname_np(pthread_t thread, const char *name, void *arg);
// FreeBSD & OpenBSD: function name is slightly different, and has no return value
void pthread_set_name_np(pthread_t tid, const char *name);
// Mac OS X: must be set from within the thread (can't specify thread ID)
int pthread_setname_np(const char*);
,你可以得到的名字后面:
#include // or ?
// Linux, NetBSD:
int pthread_getname_np(pthread_t th, char *buf, size_t len);
// some implementations don't have a safe buffer (see MKS/IBM below)
int pthread_getname_np(pthread_t thread, const char **name);
int pthread_getname_np(pthread_t thread, char *name);
// FreeBSD & OpenBSD: dont' seem to have getname/get_name equivalent?
// but I'd imagine there's some other mechanism to read it directly for say gdb
// Mac OS X:
int pthread_getname_np(pthread_t, char*, size_t);
正如你可以看到它不是POSIX系统之间完全可移植的,但据我可以通过linux知道它应该是一致的。除Mac OS X之外(其中只能从线程内部完成),其他人至少可以很容易地适应跨平台代码。
来源:
的glibc NEWS(在2.12提到新接口)
的glibc nptl/ChangeLog(在2提及新的接口。12)
的Mac OS X从/Developer/SDKs/MacOSX10.7.sdk/usr/include/pthread.h
的FreeBSD setname /无的getName据我可以看到
OpenBSD的setname /没有getname只要我可以看到