进程是最小的资源分配和管理的单位
线程是最小的调度单位
进程:每个进程拥有独立的地址空间,顺序执行某些任务,阻塞会影响下面执行的代码,上下文切换比较消耗资源。
线程:共享进程的地址空间,是把进程细分为更小的执行单元,拥有时间片的函数,切换过程节省资源。
线程:拥有独立堆栈,ID,errno,寄存器pc。
Pthread库:sudo apt-get install manpages-posix-dev
创建线程:pthread_create(线程ID,创建属性(默认NULL),线程函数,给线程传参);成功返回0.
阻塞等待线程退出:pthread_join(线程ID,退出状态); 成功返回0;
退出线程:pthread_exit(退出状态);只能使当前线程退出。
Pthread_cancel(线程ID);指定退出某个线程。
同步:按照约定的顺序依次执行某些任务。
互斥:同一时刻只能有一个线程或者进程占用资源。
同步:信号量(无名信号量),条件变量。
信号量:sem_init(信号量ID,0(无名信号量),资源的数量): 初始化信号量
sem_wait(); 申请资源,资源数目-1.
操作资源
sem_post(); 释放资源,资源数量+1.
互斥:二值信号量,完成了锁的功能
互斥锁
Pthread_mutex_init(锁ID,锁属性(默认NULL)); 初始化锁。
Pthread_mutex_lock(); 申请资源,申请锁
操作资源
Pthread_mutex_unlock();释放资源。
条件变量:另一种同步方式,配合锁来使用。
条件变量进入wait的原子操作方式:1.解锁,2.等待,3.加锁
pthread_cond_init(),初始化条件变量
pthread_cond_wait():等待资源
pthread_cond_signal():释放资源
pthread_cond_broadcast():广播