条件变量基本使用 |
您所在的位置:网站首页 › java条件变量使用 › 条件变量基本使用 |
一、条件变量
应用场景:生产者消费者问题,是线程同步的一种手段。 必要性:为了实现等待某个资源,让线程休眠。提高运行效率 int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex); int pthread_cond_timedwait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime); int pthread_cond_signal(pthread_cond_t *cond); int pthread_cond_broadcast(pthread_cond_t *cond); 二、使用步骤1.初始化: 静态初始化 pthread_cond_t cond = PTHREAD_COND_INITIALIZER; //初始化条件变量 pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; //初始化互斥量 或使用动态初始化 pthread_cond_init(&cond); 2.生产资源线程: pthread_mutex_lock(&mutex); 开始产生资源 pthread_cond_sigal(&cond); //通知一个消费线程 或者 pthread_cond_broadcast(&cond); //广播通知多个消费线程 pthread_mutex_unlock(&mutex); 3.消费者线程: pthread_mutex_lock(&mutex); while (如果没有资源){ //防止惊群效应 pthread_cond_wait(&cond, &mutex); } 有资源了,消费资源 pthread_mutex_unlock(&mutex); 注意: 1 pthread_cond_wait(&cond, &mutex),在没有资源等待是是先unlock 休眠,等资源到了,再lock 所以pthread_cond_wait he pthread_mutex_lock 必须配对使用。 2 如果pthread_cond_signal或者pthread_cond_broadcast 早于 pthread_cond_wait ,则有可能会丢失信号。 3 pthead_cond_broadcast 信号会被多个线程收到,这叫线程的惊群效应。所以需要加上判断条件while循环。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |