手动实现读写锁(线程级)

读写锁是共享独占锁。
读锁是共享锁:读的同时不能写,但同时可以多个进程一起读。
写锁是独占锁:同时只能有一个进程进行写。

利用库函数

写模式:
pthread_rwlock_wrlock(&rwlock);     //加写锁
写写写……
pthread_rwlock_unlock(&rwlock);     //解锁  

读模式:
pthread_rwlock_rdlock(&rwlock);      //加读锁
读读读……
pthread_rwlock_unlock(&rwlock);		//解锁

互斥锁+条件变量

这种方法互斥锁其实锁的是读写线程的数量(w,r 变量),通过读写线程个数协调读写操作。

写模式:
pthread_mutex_lock(&mutex);     //加锁
while(w != 0 || r > 0)
{
     pthread_cond_wait(&cond, &mutex);      //等待条件成立
}
w++;
 
pthread_mutex_unlock(&mutex);
写写写……
pthread_mutex_lock(&mutex);
w--;
pthread_cond_broadcast(&cond);       //唤醒其他因条件变量而产生的阻塞
pthread_mutex_unlock(&mutex);    //解锁
 
 
读模式:
pthread_mutex_lock(&mutex);     
while(w != 0)
{
     pthread_cond_wait(&cond, &mutex);      //等待条件成立
}
r++;
pthread_mutex_unlock(&mutex);
读读读……
pthread_mutex_lock(&mutex);
r--;
if(r == 0)
     pthread_cond_broadcast(&cond);       //唤醒其他因条件变量而产生的阻塞
pthread_mutex_unlock(&mutex);    //解锁
原文地址:https://www.cnblogs.com/sinpo828/p/10678952.html