1.线程:是进程内部的一条执行路径,一个进程可以包含多个进程
2.进程和线程的区别
|------|------------|------------|
| | 进程 | 线程 |
| 最小单位 | 资源分配的最小单位 | CPU调度的最小那位 |
| 地址空间 | 有自己的独立地址空间 | 共享进程中的地址空间 |
| 消耗资源 | 消耗资源大 | 消耗资源小 |
| 切换 | 进程的切换开销大 | 切换小 |
- 线程创建函数pthread_creat
thread:线程ID
attr:线程属性(默认NULL)
start:线程入口函数
arg:传递线程函数的参数
当主线程结束时,子线程也会结束。
- 线程的特性:
- 线程间并发执行,具体调度根据操作系统不同决定
- 资源共享,线程共享进程的资源(全局变量,堆内存,文件描述符)
- 独立的栈空间,局部变量存储在各自的栈空间中
- 函数 int pthread_join(pthread_t thrad, void **retval)
等待某个线程结束并回收线程资源
thread:等待的线程ID
retval:接收线程返回值的指针
void pthread_exit(void *retval)
终止当前线程,并返回结果
如果不需要返回值,填NULL
如果需要返回值,则必须指向全局变量或动态分配的内存(不能是栈上的内容,因为线程终止后栈内容会被释放)
练习:创建全局变量val初值为0,创建两个子线程运行val++,每个子线程循环1000次,主线程打印val的值