linux 生产者与消费者问题

生产者与消费者问题(也称线程同步问题)

讲到线程必然会讲到线程同步,那什么是线程同步楠?

线程同步概念:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多,临界区对象就是其中一种。

生产者消费者模型1(三个互斥量)

linux 生产者与消费者问题
这里主要对线程与互斥量做初始化与创建的工作,不了解的参数可以使用man … 与查看帮助文档
linux 生产者与消费者问题
这里是一些头文件与一些需要用到的参数
linux 生产者与消费者问题
这里是生产者的回调函数,注意一下加锁的顺序与释放锁的顺序,不然可能会造成死锁,看的小伙伴注意一下
linux 生产者与消费者问题
这里是消费者的回调函数,互斥量的顺序问题注意一下,锁的粒度也可以稍微调整,为了方便看信息,暂时没有去优化锁的粒度,在高并发的时候,锁的粒度越小越好

生产者与消费者模型2(条件变量加互斥锁)

linux 生产者与消费者问题
这里是互斥量,条件变量的一些初始化操作,只创建了一个生产者线程与一个消费者线程,回调函数内部采用循环来控制
linux 生产者与消费者问题
这里是生产者的回调函数,当生产了一个产品,就调用pthread_cond_signal去唤醒一个阻塞的消费者线程

linux 生产者与消费者问题
这块是消费者的回调函数,pthread_cond_wait函数在条件满足的时候会立即释放它占有的锁,因此不会造成死锁

运行结果

linux 生产者与消费者问题
由于我设置了线程睡眠(sleep),所以会造成连续的add与remove, 但是这并不影响我们的预期

最后我总结一下,可能我不是很会写博客,希望大家不要介意,以后会多多的参考别人的博客,希望能够以后能够讲解清除