linux 生产者与消费者问题
生产者与消费者问题(也称线程同步问题)
讲到线程必然会讲到线程同步,那什么是线程同步楠?
线程同步概念:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多,临界区对象就是其中一种。
生产者消费者模型1(三个互斥量)
这里主要对线程与互斥量做初始化与创建的工作,不了解的参数可以使用man … 与查看帮助文档
这里是一些头文件与一些需要用到的参数
这里是生产者的回调函数,注意一下加锁的顺序与释放锁的顺序,不然可能会造成死锁,看的小伙伴注意一下
这里是消费者的回调函数,互斥量的顺序问题注意一下,锁的粒度也可以稍微调整,为了方便看信息,暂时没有去优化锁的粒度,在高并发的时候,锁的粒度越小越好
生产者与消费者模型2(条件变量加互斥锁)
这里是互斥量,条件变量的一些初始化操作,只创建了一个生产者线程与一个消费者线程,回调函数内部采用循环来控制
这里是生产者的回调函数,当生产了一个产品,就调用pthread_cond_signal去唤醒一个阻塞的消费者线程
这块是消费者的回调函数,pthread_cond_wait函数在条件满足的时候会立即释放它占有的锁,因此不会造成死锁
运行结果
由于我设置了线程睡眠(sleep),所以会造成连续的add与remove, 但是这并不影响我们的预期