主页 > 游戏开发  > 

线程POSIX信号量/基于环形队列的⽣产消费模型

线程POSIX信号量/基于环形队列的⽣产消费模型
一,POSIX线程信号量

信号量的本质就是一个计数器,也是对资源的预定机制,POSIX信号量和SystemV信号量作⽤相同,都是⽤于同步操作,达到⽆冲突的访问共享资源⽬的。但 POSIX可以⽤于线程间同步。

1,初始化信号量

参数:

sem:传入sem_t类型数据

pshared:0表⽰线程间共享,⾮零表⽰进程间共享

value:信号量初始值

2,销毁信号量

3,等待信号量

4,发布信号量

二,基于环形队列的⽣产消费模型 基础理论:

上一次⽣产者-消费者的例⼦是基于queue的,其空间可以动态分配,现在基于固定⼤⼩的环形队列重写这 个程序(POSIX信号量):

其中head代表消费者,tail代表生产者,每个格子用信号量表示,在默认的情况下,全空或者全满的时候指向同一个位置。

任何人在访问资源之前都必须申请信号量: 对生产者来讲:剩余空间

对消费者来讲:剩余数据

我们先拿单生产单消费来描述条件:

1,消费者,生产者同时访问同一个位置:

        1.1,为空

                保证生产者,原子性先生产

        1.2   为满

                保证消费者,原子性先消费

2,非情况一情况

        生产者和消费者一定不在同一个位置

        消费者和生产者可不可以同时进行并发访问?

总结:

1,无法套一个圈

2,消费者无法超过生产者

3,同一个位置,互斥同步

4,在不同位置,并发

代码实现:

标签:

线程POSIX信号量/基于环形队列的⽣产消费模型由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“线程POSIX信号量/基于环形队列的⽣产消费模型