1.一个进程可以包含多个线程,线程是进程的子集
2.同一进程的多个线程共享同一个地址空间
共享资源 :
文件描述符表
每种信号的处理方式(SIG_IGN, SIG_DFL, 或者自定义的信号处理函数)
当前工作目录
用户id和组id
不共享资源 :
线程id
上下文, 包括寄存器的值, 程序计数器和栈指针
栈空间
errno变量
信号屏蔽字
调度优先级
3.在Linux上线程函数位于libpthread共享库中,在编译时需要加上 -lpthread选项
4.pthread_create
函数原型 : #include <pthread.h>
int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void *), void *restrict arg);
调用 : pthread_self 可以获得当前线程的id
如果任意一个线程调用了exit 或_exit, 则整个进程的所有线程都终止
5.终止线程的方法 :
从线程函数 return , 这种方法对主线程不适用, 从main函数return相当于调用exit
一个线程一个调用pthread_cancel终止同一个进程中的另一个线程
线程可以调用pthread_exit终止自己
6.函数原型 : #include <pthread.h>
void pthread_exit(void *value_ptr);
注意 ; pthread_exit或者return 返回的指针所指向的内存单元必须是全局的,或者是malloc分配的
#include <pthread.h>
int pthread_join(pthread_t thread, void **value_ptr);
如果thread线程通过return返回, value_ptr所指向的单元里存放的是thread线程函数的返回值
如果thread线程被别的进程调用pthread_cancel异常终止掉, value_ptr所指向的单元里存放的是常数PTHREAD_CANCELED
如果thread线程是自己调用pthread_exit终止的, value_ptr所指向的单元存放的是传给pthread_exit的参数
7。函数原型 : #include <pthread.h>
int pthread_detach (pthread_t tid);
不能对一个已经处于detach状态的线程调用pthread_join,这样的调用将返回EINVAL, 对一个尚未detach的线程调用pthread_join或pthread_detach都可以把该线程设置为detach转台