信号量概念
这篇文章是以前写的,里面讲了 System V的信号量的概念,POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。 但POSIX可以用于线程间同步。
POSIX信号量的接口
初始化信号量
参数:
pshared:0表示线程间共享,非0表示进程间共享
value:信号量初始值,资源的初始值
销毁信号量
等待信号量,P操作,表示要使用资源,将信号量值加1
发布信号量,V操作,表示资源使用完毕,可以归还资源了,将信号量值加1
基于环形队列的生产消费者模型
这篇文章里的生产者消费者模型,是基于一个queue展开了,也就是把queue当成一个整体来看,当成一个资源,我们对他进行加锁保护(锁就相当于二元信号量)。下面我们把这个生产者消费者模型改一下,是基于环形队列的,不把环形队列看成一个整体,把环形队列里的每个块看成很多个资源,这时候线程并发访问时会产生问题,就需要用信号量来解决
环形队列采用数组模拟,用模运算来模拟环状特性,生产者Prpducter向队列里生产任务,消费者Consumer向队列里拿数据