C共享互斥锁
C普通锁
当一个地方加上锁后,其他所有想获取锁的都会阻塞
基础使用
`pthread_mutex_t mutex;`
`struct timespec time;`
`localtime(&time)/*使用绝对时间*/`
`mutex = PTHREAD_MUTEX_INITIALZER` /*后者是一个结构常量,静态初始化*/
`pthread_mutex_init(mutex, attr)` /*可以添加属性,NULL即默认*/
`pthread_mutex_lock(mutex)` /*加锁,如果已经锁着则堵塞*/
`pthread_mutex_trylock(mutex)`
/*尝试加锁,成功反回0 失败返回EBUSY, 可以用来避免死锁*/
`pthread_mutex_timedlock(mutex, time)`
/*尝试加锁,超时返回ETIMEOUT*/
`pthread_mutex_unlock(mutex)`
`pthread_mutex_destroy(mutex)`
从命名就知道使用了
C读写锁
三种情况读锁、写锁、不加锁,与普通锁相比, 在读加锁情况下还是可以获得读锁, 可用于读远大于写的情况下。
使用
`pthread_rwlock_t rwlock;`
`pthread_rwlock_init(rwlock, attr)` /*初始化*/
`pthread_rwlock_destroy(rwlock)`
`pthread_rwlock_rdlock(rwlock)`
`pthread_rwlock_wrlock(rwlock)`
`pthread_rwlock_unlock(rwlock)`
优点
在获取到写锁后,与正常相同,其他地方读写锁都无法获得。
但是当获取到读锁后,其他地方还是可以获取到读锁;
锁的目的是防止多个线程同时修改或一方修改一方读取的情况出现,但是我们如果不修改的话,可以加读锁,这样进行读的线程就没必要阻塞了。