打印主线程,子线程及其对应的内核级线程pid

//m3.c
#include <string.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> #include <sys/syscall.h> //定义宏 #define gettid() syscall(__NR_gettid)
//主要加深用户线程和内核级线程对应的模型 pthread_t ntid;
void *printids(void *s) { pid_t pid; //进程号 pid_t ktid; //内核级线程号 pthread_t utid; //用户级线程号 pid = getpid(); //得到当前进程号 ktid = gettid(); //获得内核级线程线程号 utid = pthread_self(); //获得用户级线程号 //s是外部传入进来的参数 printf("%s pid %u ktid %u utid %u (0x%x)\n", (char *)s,(unsigned int)pid,(unsigned int)ktid, (unsigned int)utid,(unsigned int)utid); pause(); } int main(void) { //主线程main()调用pthread_create创建一个子线程 pthread_create(&ntid,NULL,&printids,"new thread:"); //主线程main()调用printids()打印自己的线程号和所属的进程号 printids("main thread:"); sleep(1); return 0; }

编译:

gcc m3.c -lpthread -o m3
执行结果:

 

观星:

 

 

 

 

 

posted @ 2021-06-25 17:27  nanfengnan  阅读(274)  评论(0编辑  收藏  举报