进程同步之条件变量

条件变量  #include

特点:读写锁和互斥锁不是任何时候都能阻塞线程,只能保证一个线程访问共享资源。

概念:提供了阻塞线程的一种机制,相当于把不符合条件的线程阻塞在一定的代码区域。尤其记住的是条件变量不能实现线程同步,它不是不是锁,但是可以在线程不满足条件的时候阻塞线程,不让线程继续运行。满足条件时通知线程继续运行。它的最主要作用是阻塞线程,因此还必须使用条件变量+互斥量互斥锁保护一块共享数据。

重点: 条件变量阻塞线程之后会将自已经获取的mutex锁解锁

                条件变量解除阻塞的时候会自己去自动获得那个mutex锁

条件变量的类型:pthread_cond_t

条件变量的函数:

 1、创建一个条件变量:pthread_cond_t cond;

 2、初始化一个条件变量

    pthread_cond_init (pthread_cond_t *cond,const pthread_cond_t*restrict attr);

   //第一个参数是条件变量地址,第二个是条件变量属性默认为NULL

 3、销毁一个条件变量

       pthread_cond_destroy(pthread_cond_t *cond);

 4、阻塞等待一个条件变量

      pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t * mutex);

 5、销毁一个条件变量

      pthread_cond_destroy(pthread_cond_t *cond);

 6、限时等待一个条件变量

     pthread_cond_timedwait(pthread_cond_t * cond,//条件变量的地址

     pthread_mutex_t* mutex,//互斥量的地址

     const structtimespec *abstime);//绝对时间

 7、唤醒至少一个阻塞在条件变量上的线程

     pthread_cond_signal(pthread_cond_t*cond);      

 8、唤醒全部阻塞在条件变量上的线程

     pthread_cond_broadcast(pthread_cond_t *cond);

你可能感兴趣的:(LINUX)