初夏小谈:全面剖析多线程(二)

14 篇文章 0 订阅

一、再谈线程安全之条件变量2

条件变量用于实现线程间的同步即唤醒与等待。条件变量和互斥锁搭配使用,是因为条件变量本身不具备操作判断的功能,对条件的判断是临界资源的操作,必须保证是原子操作。

1.实现多线程操作:

在之前的实现的是单线程,并且只用了一个条件变量这导致了唤醒时会混乱,将不知唤醒是做饭的人还是吃饭的人。所以就要用多个条件变量来唤醒和等待不同的对象。

在实现中pthread_con_wait中有加锁,休眠的原子操作,不可打断,再后被唤醒有加锁的功能。

代码实现:

实现结果:

二、线程安全之生产者与消费者模型

1.生产者与消费者模型在实现时会出现:多个生产者和多个消费者的场景。当多个生产者或消费者改变数据时会出现冲突。那么就要无比保证对临界资源的安全操作。与上一个用条件变量实现多线程的区别在于,它会事先生产一批数据。然后随时取随时补上。

代码实现:

实现结果:

在实现生产者和消费者时注意:

     1.在C++中进行传参时,不支持将地址进行值传递,所以要进行一个强转reinterpret_cast<long long>(arg),由于64位操作系统指针占8个字节所以将转为long long型,当然long已经可以。

                                                                                                                                                     珍&源码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值