linux - 多线程总结1
参考:www.cnblogs.com/forstudy/archive/2012/04/05/2433853.html
一 进程与线程
进程:
系统中程序执行和资源分配的基本单位
每个进程有自己的数据段、代码段和堆栈段
在进行切换时需要有比较复杂的上下文切换
线程:
线程有独立的栈段/errno/线程ID/信号掩码
线程共享当前工作目录/代码段/数据段/描述字/信号处理/用户ID/组ID
上下文切换开销, 比创建进程小很多
处理器调度的最小单元,也称为轻量级进程
二 线程相关的函数
头文件:#include <pthread.h>
1. pthread_t pthread_self(void);
2. int pthread_equal(pthread_t tid1 , pthread_t tid2);
3. 创建线程
4. 退出线程
5.等待线程
•调用该线程函数的入口点
•使用函数pthread_create(),线程创建后,就开始运行相关的线程函数

•在线程函数运行完后,该线程也就退出了
•或使用函数pthread_exit(),这是线程的主动行为
•不能使用exit()

•由于一个进程中的多个线程是共享数据段的,通常在线程退出之后,退出线程所占用的资源并不会随着线程的终止而得到释放
•pthread_join()函数
类似进程的wait()/waitpid()函数,用于将当前线程挂起来等待线程的结束
是一个线程阻塞的函数,调用它的线程一直等待到被等待的线程结束为止
函数返回时,被等待线程的资源就被收回

8.信号量
sem_init() 创建一个信号量,并初始化它
sem_wait()和sem_trywait(): P操作,在信号量大于零时将信号量的值减一
•区别: 若信号量小于零时,sem_wait()将会阻塞线程,sem_trywait()则会立即返回
sem_post(): V操作,将信号量的值加一同时发出信号来唤醒等待的线程
sem_getvalue(): 得到信号量的值
sem_destroy(): 删除信号量





浙公网安备 33010602011771号