1、POSIX表示可移植操作系统接口,POSIX标准定义了操作系统应该为应用程序提供的接口标准。
不同内核提供的系统调用是不同的,例如linux 和windows,编写的函数不具有移植性,为了更好的移植,建立了一套标准体系,把源代码级别的函数实现封装在一个.o和.h,当Windows调用时,调用的是windows 的内核函数,当linux调用则调用linux内核调用。/2
2、glibc 和 libc 都是 Linux 下的 C 函数库。
libc 是 Linux 下的 ANSI C 函数库;glibc 是 Linux 下的 GUN C 函数库。
3、线程id号有两种,一个是内核真正id,一个是POSIX标准id.
获取内核线程id:gettid;由于此函数并未在glibc下提供接口,可直接用系统调用方式,
#include <sys/syscall.h>
printf("%ld\n",syscall(SYS_gettid));
获取标准id:pthread_self();或者通过创建线程时的id号
tips: ps -efL 可查看线程内核id ,LWP这一栏
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/syscall.h>
void *func1(void * arg);
void *func2(void * arg);
int main(void)
{
//初始化
printf("main:%lu线程\n",pthread_self());
printf("main:%ld\n",syscall(SYS_gettid));
pthread_t id1;
pthread_t id2;
pthread_create(&id1, NULL, func1,NULL);
pthread_create(&id2, NULL, func2,NULL);
printf("func1:%lu,func2:%lu\n",id1,id2);
while(1)
{
}
pause();
return 0;
}
void *func1(void * arg)
{
printf("func1:%lu线程\n",pthread_self());
printf("func1:%ld\n",syscall(SYS_gettid));
while(1)
{
}
}
void *func2(void * arg)
{
printf("func2:%lu线程\n",pthread_self());
printf("func2:%ld\n",syscall(SYS_gettid));
while(1)
{
}
}