Linux—条件变量

一、铺垫

pthread_cond_t  //库的内置类型;创建条件变量

 二、init初始化、destroy销毁

 pthread_cond_t cond = PTHREAD_COND_INITIALIZER;        //使用宏初始化条件变量

 int pthread_cond_init(pthread_cond_t *restrict cond,                //使用函数初始化条件变量
              const pthread_condattr_t *restrict attr);

int pthread_cond_destroy(pthread_cond_t *cond);                      //销毁条件变量

 int pthread_cond_init():函数的第二个参数设为nullptr

三、pthread_cond_signal()

pthread_cond_signal():发送一个条件信号

int pthread_cond_signal(pthread_cond_t *cond);

三、 pthread_cond_wait()

pthread_cond_wait():等待条件变量

int pthread_cond_wait(pthread_cond_t *restrict cond,
              pthread_mutex_t *restrict mutex);

 此参数一为条件变量、一为互斥锁;

解释:此函数是一个阻塞式函数;

我们在写时,先加锁(pthread_mutex_lock())后调用此函数;也就是说,先加上了锁,后等待条件变量;若抢到了锁,没有条件变量会以阻塞的方式,进行挂起;并自动释放锁;防止其他线程因为此原因无法进行运行;当唤醒时因为要访问临界区资源,会再次竞争锁;

该函数可以理解为内部存在一个链表,会依次对线程进行链接,谁来谁就链在后面等待;使线程抢夺互斥锁有了顺序;并依次获得条件变量;

注:第一次使用肯定是无序的,后面使用便有了先后顺序

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值