部分理论知识
- 一个进程的所有信息对该进程的所有线程都是共享的,包括可执行的代码,程序的全局内存和堆内存,栈以及文件描述符。但是每个线程都有自己的一组寄存器,自己的栈空间,自己的errno变量。
- 内存分布(个人理解)
(1)静态内存分布(程序)和动态内存分布(进程,线程);
(2)内存分布
|stack| 栈 :局部变量,运行时才有|
|heap|堆:程序员自己分配内存,运行时才有|
| .bss | 未初始化的数据段:未初始化或者初始化为0的全局变量和静态局部变量|
|.data| 初始化的数据段:全局变量,静态局部变量,只读常量|
|.txt|代码区|
线程标识
- 进程的ID在整个系统中是唯一的,但是线程ID不同,仅仅只有在它所属的进程上下文才有意义;线程ID是pthread_t数据类型的,可移植的操作系统对其类型都有不同的处理:比如linux3.2.0使用无符号长整型表示,Solaris 10 使用无符号整型等,因此在涉及到多个线程ID比较时应使用如下函数:
- int pthread_equal(pthread_t tid1, pthread_t tid2);
返回值:若相等,返回非0数值,否则返回0
pthread_t pthread_self(void);
返回值:调用线程的id