线程之间的同步和互斥解决的问题是线程对共同资源进行访问。Posix有两种方式:
信号量和互斥锁;信号量适用同时可用的资源为多个的情况;互斥锁适用于线程可用的资源只有一个的情况
1、互斥锁:互斥锁是用加锁的方式来控制对公共资源的原子操作(一旦开始进行就不会被打断的操作)
互斥锁只有上锁和解锁两种状态。互斥锁可以看作是特殊意义的全局变量,因为在同一时刻只有一个线程能够对互斥锁进行操作;只有上锁的进程才可以对公共资源进行访问,其他进程只能等到该进程解锁才可以对公共资源进行操作。
互斥锁操作函数:
pthread_mutex_init();//初始化
pthread_mutex_lock();//上锁 参数:pthread_mutex_t *mutex
pthread_mutex_trylock();//判断上锁 参数:pthread_mutex_t *mutex
pthread_mutex_unlock();//解锁 参数:pthread_mutex_t *mutex
pthread_mutex_release();//消除互斥锁 参数:pthread_mutex_t *mutex
互斥锁分为快速互斥锁、递归互斥锁、检错互斥锁;在 init 的时候确定
int pthread_mutex_t(pthread_mutex_t *mutex, const pthread_mutex_t mutexattr);
第一个参数:进行操作的锁
mutexattr:锁的类型,默认快速互斥锁(阻塞)
2、信号量:信号量本质上是一个计数器,在操作系统做用于