一、基础知识
为什么引入线程
进程被分配了资源,创建、撤销和切换时开销较大,于是引入线程作为调度的基本单位。
什么是线程
一条线程指的是进程内一个执行单元。进程的实体是程序,而线程的实体是函数,共享进程的资源。
Linux用户级线程与内核级线程的概念
编写一个程序,获取一个线程的用户级线程号和内核级线程号。
#include <string.h>
#include <stdio.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();//获取用户级线程号
printf("%s pid %u ktid %u utid %u (0x%x)\n", s, (unsigned int)pid,
(unsigned int)ktid, (unsigned int)utid, (unsigned int)utid);
pause();//这一句什么意思?
}
int main(void){ //主线程
/*主线程调用pthread_create()创建一个子线程*/
pthread_create(&ntid, NULL, printids, "new thresds:");
/*主线程main()调用printids()打印自己的线程号和所需进程号*/
printids("main thread:");
sleep(1);
return 0;
}
编译线程:
gcc thread_ex.c -o thread_ex -lpthread
运行:
./thread_ex