zoukankan      html  css  js  c++  java
  • 线程同步之(条件变量)

    1. 相关函数                                                                                         
           #include <pthread.h>
     //初始化
           pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
           int    pthread_cond_init(pthread_cond_t    *cond,    pthread_condattr_t *cond_attr);
     
    // 使在条件变量上等待的线程中的一个线程重新开始。如果没有等待的线程,则什么也不做。如果有多个线程在等待该条件,
    //只有一个能重启动,但不能指定哪一个。
           int pthread_cond_signal(pthread_cond_t *cond);
     
    // 重启动等待该条件变量的所有线程。如果没有等待的线程,则什么也不做。
           int pthread_cond_broadcast(pthread_cond_t *cond);
     
    // 自动解锁互斥量(如同执行了 pthread_unlock_mutex),并等待条件变量触发。这时线程挂起,不占用 CPU 时间,直到条件
    //变量被触发。在调用 pthread_cond_wait 之前,应用程序必须加锁互斥量。pthread_cond_wait 函数返回前,自动重新对互
    //斥量加锁(如同执行了 pthread_lock_mutex)。
           int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
     
    // 如果在 abstime 指定的时间内 cond 未触发,互斥量 mutex 被重新加锁,且 pthread_cond_timedwait 返回错误 ETIMEDOUT。
           int   pthread_cond_timedwait(pthread_cond_t   *cond,    pthread_mutex_t *mutex, const struct timespec *abstime);
    //销毁
           int pthread_cond_destroy(pthread_cond_t *cond);
    2 解释
    条件变量是一种同步机制,必须和互斥量一起使用,它允许线程挂起,直到共享数据上的某些条件得到满足。条件变量上的基本操作有:触发条件(当条件变为 true 时);等待条件,挂起线程直到其他线程触发条件。
  • 相关阅读:
    linux brige中mac地址的比较
    BCM6358 加上TTL线 OPENWRT刷机全方位教程
    BCM6358 进入CFE界面
    BCM6358编译openwrt并刷机
    BCM6358开发板硬件资源 【OPENWRT刷机全方位教程】
    WRT54GS openwrt pppoe拨号
    CentOS6.5安装JDK1.8
    Sql Server 事物
    linux系统中的删除操作
    Java学习-集合的理解
  • 原文地址:https://www.cnblogs.com/shihaochangeworld/p/5795427.html
Copyright © 2011-2022 走看看