当前位置 博文首页 > Scissors_初夏的博客:初夏小谈:全面剖析多线程(二)

    Scissors_初夏的博客:初夏小谈:全面剖析多线程(二)

    作者:[db:作者] 时间:2021-08-27 22:10

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

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

    1.实现多线程操作:

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

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

    代码实现:

    实现结果:

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

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

    代码实现:

    实现结果:

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

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

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?珍&源码

    cs