保护临界资源/进行通讯
互斥量(锁)能够保证多线程的指令按顺序执行,避免两个线程的指令交叉执行(即 原子性)java
操做系统直接提供了互斥量的API,可以使用API完成资源的加锁,解锁的操做python
pthread_mutex_t
自旋锁避免了进程或线程的**上下文切换**的开销操做系统内部不少地方使用的是自旋锁
自旋锁不适合在单核CPU使用多线程pthread_spinlock_t
当临界资源属于 多读少写 的状况,能够采用效率更高的同步方法: 读写锁 读多写少场景相比互斥量性能提出几倍
pthread_rwlock_t
pthread_relock_rdlock
pthread_rwlock_wrlock
在生产消费场景中面临如下状况
1 缓冲区小于0时,不容许消费者消费,消费者必须等待
2 缓冲区满时,不容许生产者往缓冲区生产,生产者必须等待
当生产者生产一个产品时,唤醒可能等待的消费者
当消费者消费一个产品时,唤醒可能等待的生产者性能pthread_cond_t 配合 互斥量(锁)使用
pthread_cond_wait
pthread_cond_signal
1 互斥锁 最简单的线程同步方法,会阻塞线程
2 自旋锁 避免上下文切换的一种线程同步方法,属性忙等待CPU
3 读写锁 为多读少写的资源设计的线程同步方法,显著提升性能
4 条件变量 相对复杂的多线程同步方法,配合互斥量,更灵活的使用场景spa
java python 等语言底层也是经过fork 建立进程
进程的线程共享进程资源,理论上进程之间因为操做系统的进程管理机制(进程-页表-物理内存),进程间的内存空间是相互独立的,(进程默认是不能访问进程空间以外的内存空间)但进程能够经过共享内存打破这样的限制操作系统
共内存是高性能后台开发中最经常使用的进程同步方式
1 申请共享内存
2 链接到进程空间
3 使用共享内存
4 脱离进程空间&删除线程