问题聚焦:
在简单地介绍线程的基本知识之后,主要讨论三个方面的内容:
1 创建线程和结束线程;
2 读取和设置线程属性;
3 线程同步方式:POSIX信号量,互斥锁和条件变量。
1 创建线程和结束线程;
2 读取和设置线程属性;
3 线程同步方式:POSIX信号量,互斥锁和条件变量。
Linux线程概述
线程模型
程序中完成一个独立任务的完整执行序列,即一个可调度的实体。
分为内核线程和用户线程
当进程的一个内核线程获得CPU的使用权时,它就加载并运行一个用户线程,可见,内核线程相当于用户线程运行的“容器”。
一个进程可以拥有M个内核线程和N个用户线程, M<=N。
线程实现
完全在用户空间实现线程的特点:
- 创建和调度线程都无须内核的干预,因此速度相当快。
- 不占用额外的内核资源,很多线程不会对系统性能造成明显影响。
- (缺点)一个进程的多个线程无法运行在不同的CPU上
完全在内核空间实现线程的优缺点则和上面的实现相反,优缺点也互换。
双层调度模式是前两种实现模式的混合体
- 内核调度M个内核线程,线程库调度N个用户线程
- 不会过度消耗内核资源,又可以充分利用多处理器的优势
创建线程和结束线程
基础API
创建pthread_create
定义:
#include <pthread.h>
int pthread_create ( pthread_t* thread, const pthread_attr_t* attr,
void * (*start_routine)(void*) , void* arg);