互斥锁
当多个线程想要对同一个资源进行操作的时候,为了使得不出现脏读的情况,要用互斥锁来规定线程的先后顺序。互斥锁和信号量的作用类似。
互斥锁的API
/*锁的数据类型*/
pthread_mutex_t mutes;
/*锁的初始化*/
int pthread_mutex_init(pthread_mutex_t*, const pthread_mutexattr_t*);
/*锁的销毁函数*/
int pthread_mutex_destory(pthread_mutex_t*);
/*给互斥锁加锁 当该锁被别的线程占用那么这个函数将会阻塞*/
int pthread_lock(pthread_mutex_t*);
/*非阻塞*/
int pthread_trylock(pthread_mutex_t*);
/*释放互斥锁*/
int pthread_unlock(pthread_mutex_t*);
死锁
在一个线程当中对普通锁再次加锁会照成死锁,在多个线程当中由于不同线程的加锁和释放逻辑出现问题也会照成死锁,使得程序无法正常进行。
读写锁
读写锁的特点,多个线程可以获得同一个资源的读锁,进行资源的读取,当有一个线程拿到资源的写锁时,其他所有线程即不能拿到读锁也不能拿到写锁,提高了效率。
#include<pthread.h>
//初始化锁
int pthread_rwlock_init( pthread_rwlock_t *rwlock, const pthread_rwlock_attr* attr);
//获取读锁
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
//获取写锁
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
//释放
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
/*销毁*/
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);