读写锁是共享独占锁。
读锁是共享锁:读的同时不能写,但同时可以多个进程一起读。
写锁是独占锁:同时只能有一个进程进行写。
利用库函数
写模式:
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); //解锁