• 线程同步之(条件变量)


    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 时);等待条件,挂起线程直到其他线程触发条件。
  • 相关阅读:
    为什么你不是优秀的人?是这个原因么?
    我们应选择怎样的IT公司
    如何获得加薪
    隐藏为了适时出现
    如何通过一个问题,完成最成功的技术面试
    阿里负责人揭秘面试潜规则
    应聘互联网公司的简历应该是怎么样的?
    linq 图解
    Lambda表达式的前世今生
    Lambda应用设计模式
  • 原文地址:https://www.cnblogs.com/shihaochangeworld/p/5795427.html
Copyright © 2020-2023  润新知