3.读写锁
  1) 概念
  spinlock和互斥量都是保证同一时刻只有一个线程操作共享内存。互斥锁要么是加锁状态,要么是不加锁状态,一次只有一个线程可以对其加锁。读写所可以有3种状态,读模式下加锁状态,写模式下加锁状态,不加锁状态。相对于前两者,读写锁有更高的并发度,允许多个线程同时读共享内存。
  2) 相关函数
  pthread_rwlock_rdlock(pthread_rwlock_t*);  读锁定
  pthread_rwlock_tryrdlock(pthread_rwlock_t*); 非阻塞读锁定
  pthread_rwlock_wrlock(pthread_rwlock_t*); 写锁定
  pthread_rwlock_trywrlock(pthread_rwlock_t*); 非阻塞写锁定
  pthread_rwlock_unlock(pthread_rwlock_t*);  释放锁
  4. 条件变量
  1) 概念
  条件变量是另外一种同步机制,通过与互斥锁配合使用,利用锁保护条件变量,通过条件变量实现唤醒和等待的机制。通过这种方式,允许线程以无竞争的方式等待特定的条件发生
  2) 相关函数
  int pthread_cond_signal(pthread_cond_t *cond);  //唤醒等待条件某个线程
  int pthread_cond_broadcast(pthread_cond_t *cond); //唤醒等待条件所有线程
  int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); //等待条件发生。
  3) 说明
  调用pthread_cond_wait之前,需要线程获取互斥量,调用者把互斥量传递给函数,函数把调用线程发到等待队列上,然后对互斥量解锁,这个操作是原子操作。当pthread_cond_wait返回时,互斥量会再次被锁住,这个实现都在pthread_cond_wait函数中实现,不需要用户逻辑介入。