1.互斥锁:

  pthread_mutex_t : 静态分配初始化为PTHREAD_MUTEX_INITIALIZER ,动态分配或共享内存需要调用pthread_mutex_init来初始化

  互斥锁上锁解锁 :

    int  pthread_mutex_lock(pthread_mutex *m)

    int pthread_mutex_trylock(pthread_mutex *m)

    int pthread_mutex_unlock(pthread_mutex *m)

2.条件变量

  

  pthread_cond_t :

  pthread_cond_wait(pthread_cond_t *p,pthread_muxte_t *m) //投入睡眠直到某个线程对 p 条件变量调用pthread_cond_signal()

  pthread_cond_signal(pthread_cond_t *p);唤醒一个进程

  pthread_cond_broadcast(pthread_cont_t *p)

  pthread_cond_timewait(pthread_cond_t *p ,pthread_mutex_t *m ,const struct timespec *abstime)// 允许线程阻塞设置一个限制,超时返回ETIMEOUT错误,注意的是 abstime是绝对时间,就是返回时刻系统的时间

 

tips:互斥锁用于保护代码临界区,保证任何时刻只有一个线程在临界区内执行,条件变量总是与一个互斥锁相关联。互斥锁和条件变量可以静态分配静态初始化,也可以动态分配,动态分配需要调用函数初始化,动态初始化允许我们指定进程间共享属性,从而允许在不同的进程间共享某个条件变量,前提是互斥锁或者条件变量必须存放在这些进程共享的内存区中