//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)
",
(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
执行结果:
观星: