线程标识符:我们知道Linux每一个进程都有一个pid,类型pid_t ,由getpid() 来获得。Linux下的POSIX 线程也有一个id,类型pthread_id ,由pthread_self() 取得,该id 是线程库维护,其id 空间是各个进程独立的(即不同进程中的线程可能有相同的id)。Linux中的POSIX线程库实现的线程其实也是一个进程(LWP),只是该线程与主进程(启动线程的进程)共享一些资源而已,比如代码段、数据段等。
有时候我们可能需要知道线程的真实pid。比如进程P1要向另外一个进程P2中的某个线程发送信号时,既不能使用P2的pid,更不能使用线程的pthread id,而只能使用该线程的真实pid,称为tid。
有一个函数gettid()可以得到tid,但glibc并没有实现该函数,只能通过Linux的系统调用syscall来获取。 return syscall(SYS_gettid)
__thread
__thread,gcc内置的线程局部存储设施
__thread只能修饰POD类型
POD类型(plain old data),与C兼容的原始数据,例如,结构和整型等C语言中的类型是 POD 类型,但带有用户定义的构造函数或虚函数的类则不是
__thread string t_obj1(“cppcourse”); // 错误,不能调用对象的构造函数