打印主线程,子线程及其对应的内核级线程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
执行结果:
观星:


 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号