pthread_unlock(resource.mutex)
2 UNLOCK_R
pthread_lock(resource.mutex)
//减去一把读锁
resource.flag-=r_lock
if (resource.flag == 0) //说明当前资源为写锁
pthread_cond_broadcast(resource.cond) //这个操作激活所有上写锁的线程
pthread_unlock(resource.mutex)
3 LOCK_W
pthread_lock(resource.mutex)
while(resource.flag != 0 ) //说明当前资源为写锁或者读锁
pthread_cond_wait(resource.cond, resource.mutex)
//说明当前资源为无锁
resource.flag=w_lock
pthread_unlock(resource.mutex)
4 UNLOCK_W
pthread_lock(resource.mutex)
//减去写锁
resource.flag=w_lock
pthread_cond_broadcast(resource.cond) //这个操作激活所有上写锁和读锁的线程
pthread_unlock(resource.mutex)