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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012266559/article/details/83114746

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

利用库函数

写模式:
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);    //解锁

猜你喜欢

转载自blog.csdn.net/u012266559/article/details/83114746