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

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

1.实现多线程操作:

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

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

代码实现:

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

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

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

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

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

实现结果:

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

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

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

代码实现:

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

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

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

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

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

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

实现结果:

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

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

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

                                                                                                                                                     珍&源码

相关文章:

  • 2021-09-21
  • 2021-04-23
  • 2021-06-28
  • 2022-12-23
  • 2022-12-23
  • 2021-07-11
  • 2021-04-29
  • 2021-10-09
猜你喜欢
  • 2021-10-23
  • 2021-10-03
  • 2021-09-21
  • 2021-12-13
  • 2021-07-16
  • 2021-05-04
  • 2022-01-25
相关资源
相似解决方案